本文介绍了当点击表视图中的元素时,如何转到另一个视图控制器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在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的视图控制器中,我执行了以下操作:
我扩展了MyDelegate
AS子类,然后在里面附加了协议函数,如下所示
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")
}
}
这篇关于当点击表视图中的元素时,如何转到另一个视图控制器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!