Swift-自定义 UITableViewCell 委托给 UIViewController 只有一个协议有效
Posted
技术标签:
【中文标题】Swift-自定义 UITableViewCell 委托给 UIViewController 只有一个协议有效【英文标题】:Swift- custom UITableViewCell delegate to UIViewController only one protocol works 【发布时间】:2016-09-14 00:29:33 【问题描述】:在应用程序中,我有 UIViewController 符合的自定义协议。我有一个自定义的 tableViewCell 类,里面有 UIImageView 和 UITextView 。出队后,我将单元格的委托设置为 UIViewController。但是,只有一种自定义协议会进行回调(imagepicker 协议)。
protocol customProtocol1
func pickImage(myInt: Int)
protocol customProtocol2
func protocol2 (myInt: Int)
class controller1: UIViewController, UITableViewDelegate, customProtocol1, customProtocol2
func numberOfSectionsInTableView(tableView: UITableView) -> Int
return 1
func tableView(tableView: UITableView, numberOfRowsInSection section:Int) -> Int
return 3
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableCellClass
cell.delegate = self
return cell
func pickImage ( myInt: Int)
print("This line prints")
func protocol2 (myInt: Int)
print ("This line doesn't print")
这是 customTableCellClass 的代码:
class CustomTableCellClass: UITableViewCell, UITextFieldDelegate, UITextViewDelegate
var imageDelegate: customProtocol1?
@IBAction func pickImage( sender: AnyObject)
imageDelagate?.pickImage(205)
var somethingElseDelegate: customProcotol2?
@IBActon func clickOnButton( sender: AnyObject)
print("this line prints")
somethingElseDelegate?.protocol2(2)
override func awakeFromNib()
super.awakeFromNib()
我的问题是,为什么第一个协议得到回调而第二个没有?
【问题讨论】:
您的意思是cell.imageDelegate = self
? delegate
来自哪里?
【参考方案1】:
根据我在您的代码中看到的,您只设置了一个委托,将cellForRowAtIndexPath
中的代码更改为
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableCellClass
cell.imageDelegate = self
cell.somethingElseDelegate = self
return cell
【讨论】:
是的,我现在才知道。感谢您的回复! @EugeneTemlock 如果您认为这是正确的答案,请接受我的回答:) 谢谢【参考方案2】:您的custom cell
有两个委托属性,imageDelegate
和somethingElseDelegate
,但在您的tableView(tableView:cellForRowAtIndexPath:)
实现中,您只分配一个属性。
如果你设置了这两个属性,你的实现应该可以工作。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableCellClass
cell.imageDelegate = self
cell.somethingElseDelegate = self
return cell
【讨论】:
以上是关于Swift-自定义 UITableViewCell 委托给 UIViewController 只有一个协议有效的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 以编程方式自定义 UITableViewCell
Swift 自定义 UITableViewCell 标签始终为 nil
多个自定义 UITableViewCell 相互覆盖 Swift
Swift 中的自定义 UITableViewCell 注册类