表内的 UIButton 未触发
Posted
技术标签:
【中文标题】表内的 UIButton 未触发【英文标题】:UIButton inside table not triggering 【发布时间】:2016-08-30 18:27:43 【问题描述】:您好,我正在尝试弄清楚如何在情节提要的 UItable 中的自定义单元格内调用 UIButton。目前我有一个库,可以创建一个运行良好的侧边菜单(更多信息在这里),我可以看到我在启动模拟器时放置的按钮。但是,当我点击按钮时,该操作未触发,您能否指导我如何实现这一点?
重要提示该表格完全是在情节提要中创建的。
我在TopratedVC.swift
中的工作代码以获取触发操作的按钮:
override func viewDidLoad()
super.viewDidLoad()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewVibrantCell") as! CellClassMenu
cell.sendFeedBackBtn.tag = indexPath.row
cell.sendFeedBackBtn.addTarget(self, action: "sendFeedBackBtnAction:", forControlEvents: .TouchUpInside)
cell.contentView.userInteractionEnabled = false //tried with true as well, no difference
cell.bringSubviewToFront(cell.sendFeedBackBtn)
cell.userInteractionEnabled = true
return cell
func sendFeedBackBtnAction(sender: UIButton)
print("sendFeedBackBtnAction tapped")
我的UITableViewVibrantCell.swift
文件包含以下内容:
import UIKit
class UITableViewVibrantCell: UITableViewCell
@IBOutlet var sendFeedBackBtn: UIButton!
我的sndFeedBackBtn
有一个指向UITableViewVibrantCellsendFeedBackBtn
的引用出口,它的类为UITableViewVibrantCell
。我究竟做错了什么?谢谢。
模拟器中的样子:
【问题讨论】:
为什么不在 UITableViewCell 类中为该按钮创建一个@IBAction? 【参考方案1】:在您的帖子中,您显示了一个UITableViewVibrantCell
类,并使用“UITableViewVibrantCell”标识符将一个单元格出列,但将其转换为CellClassMenu
?
无论如何,最好为动作创建一个单元格委托,并让您的控制器决定实现,而不是在每次单元格出列时添加一个目标。你可以这样做:
UITableViewVibrantCell
import UIKit
protocol UITableViewVibrantCellDelegate: NSObjectProtocol
func buttonPressed(sender: UIButton)
class UITableViewVibrantCell: UITableViewCell
var delegate: UITableViewVibrantCellDelegate?
@IBOutlet var feedbackButton: UIButton!
override func awakeFromNib()
super.awakeFromNib()
feedBackButton.addTarget(self, action: #selector(self.buttonPressed(_:)), forControlEvents: .TouchUpInside)
func buttonPressed(sender: UIButton)
delegate?.buttonPressed(sender)
***VC
class TopratedVC: UIViewController
override func viewDidLoad()
super.viewDidLoad()
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewVibrantCell") as! UITableViewVibrantCell
cell.delegate = self
return cell
// MARK: - UITableViewVibrantCellDelegate
func buttonPressed(sender: UIButton)
print("feedbackButton tapped")
【讨论】:
【参考方案2】:选择器(“sendFeedBackBtnAction:”)不能传递参数。 sendFeedBackBtnAction 函数中不需要参数,因为您只为此按钮调用它。所以改变我会把它改成简单的......
func sendFeedBackBtnAction()
那么我还建议您将选择器更改为更新的 swift 版本...
cell.sendFeedBackBtn.addTarget(self, action: #selector(sendFeedBackBtnAction), forControlEvents: .TouchUpInside)
【讨论】:
以上是关于表内的 UIButton 未触发的主要内容,如果未能解决你的问题,请参考以下文章
tableviewcell 内的 UIButton 触发单元格而不是按钮 [重复]
UIButton 操作未在模态显示的 ViewController 上触发