错误:UIButton 上的索引路径 (Swift)

Posted

技术标签:

【中文标题】错误:UIButton 上的索引路径 (Swift)【英文标题】:Error: Index Path on a UIButton (Swift) 【发布时间】:2015-08-05 21:27:16 【问题描述】:

我能够成功地将电话号码附加到 phoneNumbers 数组中,但是当我尝试使用 indexPath 时,我收到一条错误消息:“无法识别的选择器已发送到实例。”这是否意味着我不能将 indexPath 与 callButton 函数一起使用?如果是这样,我能做些什么?

   override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCellWithIdentifier("MyCell") as! TableViewCell
    cell.callButton.addTarget(self, action: "callButton", forControlEvents: UIControlEvents.TouchUpInside)
    return cell



func callButton(indexPath: NSIndexPath) 

    UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://\(phoneNumbers[indexPath.row])")!)


【问题讨论】:

您已经使用 Interface Builder 创建了您的 @IBAction 不是吗?您需要indexPathUITableViewUICollectionView 等)做什么? 是的,在 Interface Builder 中。我需要 indexPath,因为我正在从 Parse 检索电话号码数组,并希望将每个号码分配给它自己的表格单元格中的唯一呼叫按钮。 查看我的更新答案,但我不明白您为什么不在 cellForRowAtIndexPath 中定义单元格数据 我的单元格在 cellForRowAtIndexPath 中定义。其他单元格属性(其中定义了 imagview 视图和标签) 【参考方案1】:

出现错误是因为在使用 Interface Builder 设置 @IBAction 并将其注册为其目标之后,您更改了其签名并添加了参数,这使得 unrecognized selector sent to instance

在自定义单元格类中为UIButoon 定义IBOutlet 后,您可以在cellForRowAtIndexPath 中访问和设置您想要的类的任何内容,如下所示:

CustomTableViewCell

import UIKit

class TableViewCell: UITableViewCell 

   @IBOutlet weak var button: UIButton!

   var phoneNumber: Int!

   override func awakeFromNib() 
      super.awakeFromNib()
      // Initialization code
   

   override func setSelected(selected: Bool, animated: Bool) 
       super.setSelected(selected, animated: animated)

       // Configure the view for the selected state
   

   @IBAction func callButton(sender: AnyObject) 
      println("Calling to \(self.phoneNumber)")
   

然后在您的UITableViewControllerUIViewController 中,您可以为您的UIButton 设置您想要的内容,如下面的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell

    // Set the phone number according the indexPath.row of the cell to call later
    cell.phoneNumber = self.phoneNumberList[indexPath.row]

    return cell

当您在cellForRowAtIndexPath 中设置phoneNumber 时,您将为每个单元格设置不同的phoneNumber,这就是在cellForRowAtIndexPath 中执行此操作的重点。

希望对你有所帮助。

【讨论】:

这些是自定义单元格,所以我有一个自定义类,我不能在它之外定义一个出口? 不,你不能在你的单元格之外定义一个出口。 嗯,我不是要更改标题。我正在尝试使用它,因此当用户单击通话按钮时,会拨打正确的电话号码。所以我需要将数字添加到一个数组中(我已经完成了),然后使用 UIApplication.sharedApplication() 调用它。有什么想法吗? 我用我现在使用的代码更新了我的问题,但我仍然收到无法识别的选择器发送到实例错误。 @theActuary 查看更新的答案,我认为以上解决了您的问题。

以上是关于错误:UIButton 上的索引路径 (Swift)的主要内容,如果未能解决你的问题,请参考以下文章

代码转换 swift 2 --> 3 导致索引路径处的二进制运算符错误

使用swift在背景图像上的uibutton文本

UIButton 条件适用于单个索引路径行

Swift 错误:“UIButton”类型的值没有成员“文本”[关闭]

SetBackgroundImage 太大 UIButton swift

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