错误: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
不是吗?您需要indexPath
(UITableView
、UICollectionView
等)做什么?
是的,在 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)")
然后在您的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
当您在cellForRowAtIndexPath
中设置phoneNumber
时,您将为每个单元格设置不同的phoneNumber
,这就是在cellForRowAtIndexPath
中执行此操作的重点。
希望对你有所帮助。
【讨论】:
这些是自定义单元格,所以我有一个自定义类,我不能在它之外定义一个出口? 不,你不能在你的单元格之外定义一个出口。 嗯,我不是要更改标题。我正在尝试使用它,因此当用户单击通话按钮时,会拨打正确的电话号码。所以我需要将数字添加到一个数组中(我已经完成了),然后使用 UIApplication.sharedApplication() 调用它。有什么想法吗? 我用我现在使用的代码更新了我的问题,但我仍然收到无法识别的选择器发送到实例错误。 @theActuary 查看更新的答案,我认为以上解决了您的问题。以上是关于错误:UIButton 上的索引路径 (Swift)的主要内容,如果未能解决你的问题,请参考以下文章
代码转换 swift 2 --> 3 导致索引路径处的二进制运算符错误
Swift 错误:“UIButton”类型的值没有成员“文本”[关闭]