【发布时间】:2014-12-31 21:36:14
【问题描述】:
我有一个选项卡栏应用程序,其中一个包含表格视图的选项卡在按下表格单元格时进入第三个视图。视图控制器充当 UITableView 的委托,我以编程方式触发 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
}
最后我设置如下代码,用第三个视图调试问题:
class DetailsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
println("did load")
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
println("will appear")
}
}
问题是当我第一次按下表格单元格时,viewWillAppear 函数永远不会被调用,直到我以某种方式与 UI 交互(例如,只需轻按屏幕)。我想要进入的视图没有出现,好像屏幕没有刷新一样。但是,当我点击屏幕时,整个动画都会运行,我可以按预期进行。这是我点击单元格时的输出:
cell tapped, starting segue
prep for segue
did load
我试图在网上找到解决方案,但我发现的所有问题似乎根本不起作用。就我而言,它正在起作用,但不是立即起作用。
如果有帮助,这是我的故事板的屏幕截图:
【问题讨论】:
-
在下一个视图控制器中看起来并不多……它是什么?只是在 prepareForSegue 中设置的标签之类的?如果是这样的话,你能发布代码吗?
-
@LyndseyScott 你的意思是 DetailsViewController?这就是我现在拥有的所有代码。我实际上还没有传递任何数据,只是想先让它动画化。视图本身只是一个菜单栏和我从情节提要编辑器添加的标签。
-
哦,好的。我以为你可能在后台执行某种动作,但我想情况并非如此......我会考虑一下......
-
这是 100% 的代码,对吧?就像您不想在 viewDidLoad 中执行任何长时间的任务一样?
-
所以我通过允许在点击时突出显示单元格来消除问题的症状(在我设置
cell.selectionStyle = UITableViewCellSelectionStyle.None之前)。我仍然困扰着这个问题可能仍然存在,但至少现在可以了。