我能够成功将电话号码附加到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])")!)
}
答案 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)")
}
}
然后在您的UITableViewController
或UIViewController
中,您可以在以下代码中为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
内执行此操作。
我希望这对你有所帮助。