UIButton 不适用于自定义 UITableViewCell (Swift)

Posted

技术标签:

【中文标题】UIButton 不适用于自定义 UITableViewCell (Swift)【英文标题】:UIButton doesn't work on a custom UITableViewCell (Swift) 【发布时间】:2015-10-26 20:31:05 【问题描述】:

我真的很抱歉我的英语,如果我做错了什么,这是我在这里的第一个问题。

我有一个自定义 UITableViewCell 作为 *.xib 文件中的视图。里面有一个 UIImage 和那个 UIImage 上的一个按钮。 我将此按钮与插座连接到我的 CustomTableViewCell.swift 类。

@IBOutlet weak var authorImage: UIImageView!
@IBOutlet weak var authorButton: UIButton!

在 MyTableViewController.swift 中我注册了一个 nib

tableView.registerNib(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "my_cell")

并写了一个像这样的 cellForRow... 函数:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("my_cell", forIndexPath: indexPath) as! CustomTableViewCell
    cell.authorButton.addTarget(self, action: "authorButtonPressed:", forControlEvents: .TouchUpInside)
    return cell

最后我有了这个函数(我在 addTarget... 中使用它):

func authorButtonPressed (sender:UIButton!) 
    print("Hi!")//line1
    print(sender)

和第一行的断点。但是这个函数永远不会被调用。

而且我也刚刚了解到,当我点击它时,该按钮没有动画。

我该如何解决它或找到解决方法?

提前谢谢你

【问题讨论】:

您 100% 确定按钮位于图像顶部而不是其后面?如果您暂时删除/隐藏图像,问题是否仍然存在? @j.f.我刚刚删除了按钮周围的所有内容。但是当我点击它时它仍然没有改变。并且 authorButtonPressed: 函数不会开始执行。我还尝试使用视图层次结构调试器来查看是否有东西可以在我的按钮上,但按钮上唯一的东西是 UITableViewCellContentView。这是图片:dropbox.com/s/qb08tm08l5i0i9a/… 你能贴一张你的xib的截图(带有文档大纲)吗? @joern 我已经完全删除了单元格上的所有内容,但我的按钮 dropbox.com/s/be8p26d7hbqy1qs/… 【参考方案1】:

您正在使用 UIView 作为 nib 中的根视图。对于自定义UITableViewCell,您需要将根视图设为 UITableViewCell:

因此,您必须创建一个空的 xib,然后在其上拖动一个 UITableViewCell。然后开始将您的子视图添加到ContentView

【讨论】:

【参考方案2】:

你不应该在这个函数上添加添加目标:

override func tableView(tableView: UITableView, cellForRowAtIndexPath    indexPath: NSIndexPath) -> UITableViewCell 
let cell = tableView.dequeueReusableCellWithIdentifier("my_cell", forIndexPath: indexPath) as! CustomTableViewCell
**cell.authorButton.addTarget(self, action: "authorButtonPressed:", forControlEvents: .TouchUpInside)**
return cell

您只需将出口操作添加到您的单元格中。没事的。喜欢这段代码:

@IBAction func testPressed(sender: AnyObject) 
    print("test")

【讨论】:

【参考方案3】:

按照 joern 解决方案,然后通过单击选择 Table View Cell 并确保勾选 User Interaction Enabled 属性检查器窗格的属性。

【讨论】:

【参考方案4】:

你用过这个神奇的按钮吗?

多亏了它,您可以看到您的图层树,它可能会包含一些奇怪的东西......就像这样。

查看其余部分的视图,这些视图在那里搞得一团糟。调查一下,伙计! ?

【讨论】:

以上是关于UIButton 不适用于自定义 UITableViewCell (Swift)的主要内容,如果未能解决你的问题,请参考以下文章

PKAddPassButton 不适用于 iOS 9

setImage:forState 不适用于 UIButton 的子类

自定义 UIView:未调用 UIButton addTarget

UITapGestureRecognizer 不适用于 UIButton

NSLayoutConstraint 不适用于 uibutton 和 uilabel

我的自定义 UIButton 不能用于替换 leftBarButtonItem