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的视图控制器中,我执行了以下操作:
我扩展了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")
}
}
这篇关于当点击表视图中的元素时,如何转到另一个视图控制器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:当点击表视图中的元素时,如何转到另一个视图控制器?
基础教程推荐
猜你喜欢
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01