我有一个 UITapGestureRecognizer 附加到 Swift 中表格视图单元格内的图像。
当用户点击图像时,我想访问包含表格视图单元格的视图控制器的属性(变量),但我似乎无法做到这一点。
View控制器中的属性定义为:
@objcMembers class myVC : UIViewController,UITableViewDelegate, UITableViewDataSource,UITextViewDelegate {
var lastUserMessage = "test"
}
手势识别器函数在自定义 tableViewCell 中定义如下
class MyImageCell : UITableViewCell {
@objc func didTapImage(gesture: UITapGestureRecognizer) {
print("someone tapped image")
print("self is",self)
/*
prints: myApp.MyImageCell: 0x7f8668045e00; baseClass = UITableViewCell; frame = (0 347; 393 175.667); clipsToBounds = YES; autoresize = W; animations = { <UIMotionEffectGroup: 0x60000089c8a0>=<CAAnimationGroup: 0x60000089d380>; }; layer = <CALayer: 0x600000882a40>>
*/
print("lastUserMessage is",lastUserMessage)//prints nil
print("MyVC.shared.lastUserMessage is",MYVC.shared.lastUserMessage)//prints nil
}
如何从 tableviewcell 中访问 VC 的变量。看起来应该没那么难吧?
人类人工智能提出了以下建议,但创建一个全新的委托协议对于本应是一项简单任务的任务来说似乎真的很困难......
从表视图中访问视图控制器的属性 在 Swift 中,您可以使用委托模式。首先,创建一个 协议,其中包含您要访问的属性的方法。 然后,使您的视图控制器符合此协议并设置 单元格委托给视图控制器。在单元格中,调用该方法 在委托上访问该属性。通过这种方式,您可以访问 查看控制器的属性,而不直接耦合单元格和 视图控制器。
如果您想将有关 ViewController 的信息提供给您的 Cell,则无需委托模式或回调。您可以从存根更改单元格。但不要忘记将表视图和数据源应用到 ViewController 本身。如果您想从 ViewController 获取有关单元格的信息,那么您需要应用回调或委托模式。
@objcMembers class myVC : UIViewController,UITableViewDelegate, UITableViewDataSource,UITextViewDelegate {
var lastUserMessage = "test"
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ID", for: indexPath) as! MyImageCell
cell.lastUserMessage = self.lastUserMessage
return cell
}
}
class MyImageCell : UITableViewCell {
var lastUserMessage = ""
@objc func didTapImage(gesture: UITapGestureRecognizer) {
print("someone tapped image")
print("print ",lastUserMessage)
}
}