我有一个选项卡栏应用程序,其中一个包含表格 View 的选项卡在按下表格单元格时转入第三个 View 。 View Controller 充当 UITableView 的委托(delegate),我按如下方式以编程方式触发 segue:
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
}
最后,我设置了以下代码来调试第三个 View 的问题:
class DetailsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
println("did load")
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
println("will appear")
}
}
问题是,当我第一次按下表格单元格时,viewWillAppear
函数永远不会被调用,直到我以某种方式与 UI 交互(例如,只是点按屏幕上的任意位置)。我想进入的 View 没有显示,就好像屏幕没有刷新一样。但是,当我点击屏幕时,整个动画都会运行,我可以按预期继续。这是我点击一个单元格时的输出:
cell tapped, starting segue
prep for segue
did load
我试图在网上寻找解决方案,但我发现的所有问题似乎根本不起作用。就我而言,它正在起作用,但不是立即起作用。
如果有帮助,这是我的 Storyboard的屏幕截图:
最佳答案
Sefu 找到了答案并将其发布在评论中,我遇到了同样的问题,他的解决方案对我有效。诀窍是让它被选中触发 segue 的单元格需要设置选择样式(而不是无),而且我还发现取消选择 tableView:didSelectRowAtIndexPath: 中的单元格也需要发生。
关于iOS 8 - performSegueWithIdentifier 加载 View 但直到我点击屏幕才显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726516/