mercredi 31 décembre 2014

iOS 8 - performSegueWithIdentifier loads view but doesn't show it the first time

I have a Tab Bar application, and one of the tabs, which contains a Table View, segues into a third view when a table cell is pressed. The view controller acts as a delegate for the UITableView, and I trigger the segue programatically as follows:



func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
println("cell tapped, starting segue")
performSegueWithIdentifier("showDetails", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
println("prep for segue")
// TODO - more code here
}


Finally, I set up the following code to debug the problem with the third view:



class DetailsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
println("did load")
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
println("will appear")
}
}


The problem is that when I press a table cell for the first time, the viewWillAppear function never gets called until I interact with the UI in some way (e.g. just a tap anywhere on the screen). The view that I want to segue into doesn't show up, as if the screen didn't get refreshed. However, when I tap the screen, the whole animation runs and I can segue as intended. This is my output when I tap a cell:



cell tapped, starting segue
prep for segue
did load


I tried to find solutions online, but all the issues I found it seems to just not work at all. In my case, it is working, but not immediately.


In case it helps, here's a screenshot of my storyboard:


Screenshot of my Storyboard




Aucun commentaire:

Enregistrer un commentaire