Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
343 views
in Technique[技术] by (71.8m points)

ios - Programmatically emulate the selection in UITableViewController in Swift

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!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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)
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...