我有一个Tab Bar应用程序,其中一个包含Table View的选项卡在按下表格单元格时会进入第三个视图。视图控制器充当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
我试图在网上找到解决方案,但我发现的所有问题似乎都根本不起作用。就我而言,它是有效的,但不是立即的。
如果它有帮助,这是我的故事板的截图:
答案 0 :(得分:0)
Sefu找到答案并将其发布在评论中,我遇到了同样的问题,他的解决方案对我有用。诀窍是使选择触发segue的单元格需要设置选择样式(而不是None),并且我还发现取消选择tableView中的单元格:didSelectRowAtIndexPath:也需要发生。
答案 1 :(得分:0)
在我的selectionStyle = .None时遇到类似的问题。 您可以使用的选项,如果您像我一样并且不希望应用selectionStyle,则在准备segue时将单元格项目设置为未选中。 这似乎阻止了'问题'我看到segue一次完美地工作,但所有后续调用都需要选择两次单元格。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//sending the index path up as the sender so the prep for segue can access the cell
self.performSegueWithIdentifier("segueID", sender: indexPath);
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "segueID"){
if let indexPath : NSIndexPath = sender as? NSIndexPath{
tableViewReference.cellForRowAtIndexPath(indexPath)?.selected = false;
let destinationVC : UIViewControllerClass = segue.destinationViewController as! UIViewControllerClass;
destinationVC.customMethod(/* some value */);
}
}
}