我有要在表格视图中显示的项目列表。点击每个 item我想触发一个方法。 I-E
var menuItems = [LeftMenuItem]() // -> Define at top of vie controller
func populateLeftMenuData() { // populating data in viewDidLoad
var leftMenuItem = LeftMenuItem(imageName: "flagIcon", cellLabel : "Home" , method : "home")
menuItems.append(leftMenuItem)
leftMenuItem = LeftMenuItem(imageName: "flagIcon", cellLabel : "Logout" , method : "logout")
menuItems.append(leftMenuItem)
}
这是在tableview中填充数据的方式。在我的每一行 显示“细胞标签”,点击我要调用的细胞 “方法”。
我正在做的是
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let leftMenuItem = menuItems[indexPath.row]
perform(Selector(leftMenuItem.method!))
}
func logout () {
print("logout")
}
func home () {
print("Home")
}
但是点击单元格会将无法识别的选择器发送给 实例。对于xCode 8 swift 3来说,同样的工作正常。
答案 0 :(得分:0)
只需将@objc
放在使用Selector
s调用的所有方法之上:
@objc func logout() {
print("logout")
}
@objc func home() {
print("Home")
}
在Swift 4中,@objc
inference is very limited。我怀疑在Swift中动态创建Selector
是一个很好的策略。