Swift UITableView didSelectRowAtIndexPath not getting called

前端 未结 10 1976
野的像风
野的像风 2021-02-06 23:18

New to IOS development and am having trouble with handling cell selection on a table. Whenever I select, the method is not getting called below - any idea why?

My proje

相关标签:
10条回答
  • 2021-02-06 23:48

    SWIFT 3

        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
          // Do here
        }
    

    Use the above delegate method in swift 3

    0 讨论(0)
  • 2021-02-06 23:49

    Another caveat which took me ages to figure out is to make sure that all three of your Table View, your Cell and your Content View all have User Interaction Enabled. Then in Swift 4, at least, you can use:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    
    0 讨论(0)
  • 2021-02-06 23:52

    Another caveat is tap gesture recognizers. It's a common use case to use tap gesture recognize to handle different logic within your view controllers with table views, whether that's exiting touch control or first responders.

      let tapGesture = UITapGestureRecognizer(target: self, action: #selector(viewTapped))
      view.addGestureRecognizer(tapGesture)
    

    E.G. This line of code handles dismissing a date picker in my application and prevents my tableview from calling didSelectRow delegate method

    0 讨论(0)
  • 2021-02-06 23:54

    You have to set an @IBOutlet to the tableView in you ViewController and set as it's delegate and dataSource to you can see the data an respond to changes in the tableView.

    Something like this :

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.tableView.delegate = self
        self.tableView.dataSource = self
    }
    

    And implements the UITableViewDataSource protocol too.

    Or you can too in the Interface Builder set the ViewController as it's delegate and dataSource (more easy to do I think) and avoid to set manually in code like above. Is up to you.

    I hope this help you.

    0 讨论(0)
  • 2021-02-06 23:54

    if you are editing your tableView:

    tableView.allowsSelectionDuringEditing = true
    
    0 讨论(0)
  • 2021-02-06 23:58

    You have to use this: First take a look what are you extending and then use the tableView method.

        class YourViewController : UIViewController, UITableViewDelegate, UITableViewDataSource {
    
        @IBOutlet weak var mUITableView: UITableView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // We need to tell to UITableView that we will add the data by ourselves
            self.mUITableView.delegate = self
            self.mUITableView.dataSource = self
    
            // Register the UITableViewCell class with the tableView
            self.mUITableView?.registerClass(UITableViewCell.self, forCellReuseIdentifier: self.cellIdentifier)
            // Setup table data
            getEvents()
    
            self.mUITableView.allowsSelection = true   
        }
    
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return tableData.count
        }
    
        func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 1
        }
    
        func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
           //  here to create you cell view      
        }
    
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            print("You selected cell #\(indexPath.row)!")
        }
    
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "subtitleCell")
            cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
            cell.textLabel?.text = "\(tableData[indexPath.row].name) - (\(tableData[indexPath.row].eventStateId))"
            cell.detailTextLabel?.text = tableData[indexPath.row].lastUpdate
            return cell
        }
    }
    
    0 讨论(0)
提交回复
热议问题