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

时间:2015-08-05 21:27:17

标签: swift uibutton nsindexpath

我能够成功将电话号码附加到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])")!)

}

1 个答案:

答案 0 :(得分:0)

您的错误来自,因为在您使用Interface Builder设置@IBAction并将其注册为目标后,您已更改其签名并添加了参数,这将生成unrecognized selector sent to instance

在自定义单元格类中为IBOutlet定义UIButoon后,您可以在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
}

当您为每个单元格的phoneNumber设置cellForRowAtIndexPath不同的phoneNumber时,就可以在cellForRowAtIndexPath内执行此操作。

我希望这对你有所帮助。