How to go to another View Controller when an element inside table view is being tapped?(当点击表视图中的元素时,如何转到另一个视图控制器?)
本文介绍了当点击表视图中的元素时,如何转到另一个视图控制器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在TableViewCell中有一个UIView,当用户点击此UIView时,它会转到另一个视图控制器并传递数据。
因此在TableViewCellClass中我执行了以下操作:
我设置了一个协议,并在用户打开UIView时检测到"Tap"手势。此部分工作正常:
protocol MyDelegate : class {
func runThisFunction(myString : String)
}
class MyTableViewCell: UITableViewCell {
weak var delegate : MyDelegate?
...other code here
//here detect the tap
let tap = UITapGestureRecognizer(target: self, action: #selector(hereTapped))
self.myUIElementInThisCell.addGestureRecognizer(tap)
}
@objc func hereTapped(sender: UITapGestureRecognizer? = nil){
self.delegate?.runThisFunction(myString: "I am a man")
}
因此,在包含此TableView的视图控制器中,我执行了以下操作:
我扩展了MyDelegateAS子类,然后在里面附加了协议函数,如下所示
class MyViewController: UIViewController,MyDelagate{
func runThisFunction(myString : String) {
print("Tapped in view controller")
self.performSegue(withIdentifier: "MySegue",sender : self)
}
override func viewDidLoad() {
super.viewDidLoad()
let tableViewCell = MyTableViewCell()
tableViewCell.delegate = self
}
}
结果:
完成上述所有操作后,当我点击UIView时,它没有执行MyViewControllerClass中所述的段,甚至print()命令也没有执行。
那么我错过了什么?请给我一个解决方案。谢谢
推荐答案
您的viewDidLoad中有问题:
// you create a new cell
let tableViewCell = MyTableViewCell()
// set its delegate
tableViewCell.delegate = self
// and then the cell is not used for anything else
基本上,您不是为正在显示的单元格设置委托,而是为您在viewDidLoad中创建的另一个实例设置委托。
您必须在cellForRowAt中设置委托,以确保正确的单元格获得delegate集合:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "yourIdentifier", for: indexPath) as! MyTableViewCell
cell.delegate = self
return cell
}
这将为显示的那些单元格设置delegate。
或者,我建议使用UITableViewDelegate中的didSelectRowAt(如果您的MyViewController实现了它):
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.row == 0 { // only if it is the first cell (I assume that MyTableViewCell is first)
runThisFunction(myString: "I am a man")
}
}
这篇关于当点击表视图中的元素时,如何转到另一个视图控制器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:当点击表视图中的元素时,如何转到另一个视图控制器?
基础教程推荐
猜你喜欢
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
