How to programmatically select a row in UITableView in Swift

前端 未结 7 590
执笔经年
执笔经年 2020-12-24 04:52

I need to select a row in a UITableView programmatically using Swift 1.2.

This is the simple code:

var index = NSIndexPath(forRow: 0, inSection: 0)
         


        
7条回答
  •  失恋的感觉
    2020-12-24 05:20

    Using Swift 2.x, as described by Pankaj purohit answers the correct method is:

    func tapRowAtIndex(index:Int) {
            let rowToSelect:NSIndexPath = NSIndexPath(forRow: index, inSection: 0)
            self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None)
            self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect)
    }
    

    Keep in mind that if you call this method from an external class for example, you dont know when tableView has finished its loading, so what's the possibilities?, how to workaround this problem? :

    Step one: create a class boolean var

    var automatingTap: Bool = false
    

    Step two: check when the table finish its loading and launch an "end operations" method:

    func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) 
    {
        let lastRowIndex = tableView.numberOfRowsInSection(0)
        if indexPath.row == lastRowIndex - 1 {
           endOperations()
        }
    }
    
    func endOperations() 
    {
       print("finished loading")
       if automatingTap {
            tapRowAtIndex(0)
            automatingTap = false
       }
    }
    

    Step three: call my tableView class from another class

    for example:

    override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
        if segue!.identifier == "DetailsTableView" {
            let viewController:ViewController = segue!.destinationViewController as ViewController
            viewController.automatingTap = true
        }
    }
    

提交回复
热议问题