【问题标题】:didSelectRowAtIndexPath not working, Swift 3didSelectRowAtIndexPath 不起作用,Swift 3
【发布时间】:2017-03-22 08:51:20
【问题描述】:

任何人都知道为什么不调用 didSelectRowAtIndexPath 吗? delegate 在代码和情节提要中都对我进行了三次检查。

class AddCard: UIViewController,UIPopoverPresentationControllerDelegate, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var cardView: UIView!
@IBOutlet weak var tableView: UITableView!

let tableItems = ["Background Color","Background Image","Font Style","Font Color"]
let cellID = "cell"

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func setBackgroundColor (_ color: UIColor) {
    cardView.backgroundColor = color
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return tableItems.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath as IndexPath)

    let row = indexPath.row
    cell.textLabel?.text = tableItems[row]

    return cell
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath as IndexPath, animated: true)
    print(indexPath.row)
    let row = indexPath.row
    switch(row){
    case 0:
        let popoverVC = storyboard?.instantiateViewController(withIdentifier: "colorPickerVC") as! ColorPickerViewController
        popoverVC.modalPresentationStyle = .popover
        popoverVC.preferredContentSize = CGSize(width: 284, height: 446)
        if let popoverController = popoverVC.popoverPresentationController {
            popoverController.sourceView = self.view
            popoverController.sourceRect = CGRect(x: 0, y: 0, width: 85, height: 30)
            popoverController.permittedArrowDirections = .any
            popoverController.delegate = self
            popoverVC.delegate = self
        }
        present(popoverVC, animated: true, completion: nil)
        break
    default: break

    }
}

}

【问题讨论】:

  • 您没有将didSelectRowAtIndexPath: 的签名更新为 Swift 3 的签名。来自文档:optional func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath),请注意 _ didSelectRowAtdidSelectRowAtIndexPath,就像您更新的另一个一样,但不是这个。删除该行并让 XCode 自动完成。否则,您可以将其替换为文档中的那个。
  • 杀了它!谢谢大佬。

标签: ios swift xcode uitableview


【解决方案1】:

Swift 3 修改了方法的签名(也有很多方法,新的“规则”/样式)

替换:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

请注意 _didSelectRowAtdidSelectRowAtIndexPath,就像您更新的其他那些(也适应了相同的“风格”),但不是这个。

删除该行并让 XCode 自动完成。否则,您可以将其替换为文档中的那个。

【讨论】:

  • 谢谢!为什么在地球上......当他们决定重命名每个新版本的 swift 中的所有内容时,当您输入不推荐使用的名称时,xcode 编辑器不会建议新名称。我只是在学习 xcode 和 swift,我很震惊开发人员的体验是多么糟糕。
猜你喜欢
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多