Programmatically emulate the selection in UITableViewController in Swift

允我心安 提交于 2020-01-10 07:42:06

问题


Sorry for the question without any line of code. I need advice how to proceed, if at possible that I want.

In Swift language.

Let us assume there is an app with two controllers - UITableViewController with embedded NavigationController, as the main. When you select a row in the table, opens UIViewController, which displays detailed information about the selected value.

Is it possible to do otherwise? When the application start, programmatically emulate the selection of the first row in the table and immediately display UIViewController with detailed information about the selected value. And from this controller possible to return to UITableViewController via the NavigationController.

Once again I apologize and thank you in advance!


回答1:


Yes you can do this in swift.Just load your tableViewController as usual.You just have to call

In Swift

    let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0);  //slecting 0th row with 0th section
    self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None);

The selectRowAtIndexPath function will not trigger delegate methods like didSelectRowAtIndexPath: so you have to manually trigger this delegate method

   self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect); //Manually trigger the row to select

Or If you are pushing ViewControllers with segue you have to trigger performSegueWithIdentifier

    self.performSegueWithIdentifier("yourSegueIdentifier", sender: self);

Now you can push viewController in didSelectRowAtIndexpath.To select the first row in first section or execute whaterver you have written in didSelectRowAtIndexpath: of tableView

As For your case just push the viewController on select at 0th index with didSelectRowAtIndexPath

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!){

    if indexPath.row == 0 {

        self.navigationController.pushViewController(yourViewControllerToPush, animated: YES);
    }
    //handle other index or whatever according to your conditions
}

It will show the view controller pushed and if you do not want to animate view controller just pass NO to pushViewController method.

On pressing Back button you will back to your viewController

In your case just write this in your viewDidAppear

if firstStart {
    firstStart = false
    let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0)
    self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition:UITableViewScrollPosition.None)
    self.performSegueWithIdentifier("showForecastSelectedCity", sender: self)
}



回答2:


You can also do this simply by accessing the tableView Delegate to force "didSelectRowAtIndex" to fire

//programatically select a row to work with

self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.Top)

// Programatically selecting row does not fire the "didSelectRowAtIndexPath" function so we must manually force the firing as per below

self.tableView.delegate!.tableView!(tableView, didSelectRowAtIndexPath: indexPath!)


来源:https://stackoverflow.com/questions/24787098/programmatically-emulate-the-selection-in-uitableviewcontroller-in-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!