Objective c 在performsgue:withIdentifier:WithPopover样式后不调用PrepareForsgue
我有一个通用的应用程序,在那里我为IPad和IPhone情节提要共享同一个控制器。 我在UITableView上放置了一个UILongPressGestureRecognitor,当iPhone上按下一个单元格时,它会调用一个执行序列的动作:Objective c 在performsgue:withIdentifier:WithPopover样式后不调用PrepareForsgue,objective-c,ipad,xcode4,storyboard,uipopovercontroller,Objective C,Ipad,Xcode4,Storyboard,Uipopovercontroller,我有一个通用的应用程序,在那里我为IPad和IPhone情节提要共享同一个控制器。 我在UITableView上放置了一个UILongPressGestureRecognitor,当iPhone上按下一个单元格时,它会调用一个执行序列的动作: -(IBAction)showDetail:(id)sender { UILongPressGestureRecognizer *gesture = (UILongPressGestureRecognizer*)sender; if (ge
-(IBAction)showDetail:(id)sender {
UILongPressGestureRecognizer *gesture = (UILongPressGestureRecognizer*)sender;
if (gesture.state == UIGestureRecognizerStateBegan) {
CGPoint p = [gesture locationInView:self.theTableView];
NSIndexPath *indexPath = [self.theTableView indexPathForRowAtPoint:p];
if (indexPath != nil) {
[self performSegueWithIdentifier:SEGUE_DETAIL sender:indexPath];
}
}
}
segue是作为“推送”执行的详细视图。您应该注意的第一件事是,发送方是nsindepath,这是我找到的传递所选单元格的唯一方法。也许有更好的解决办法。
从某种意义上说,在调用prepareForSegue之前,一切都很好
然而,在iPad上,我将segue标识符改为Popover。
现在部分工作正常,执行segue,但未调用prepareforsgue,因此目标视图控制器未按应有的方式设置
我做错了什么?到目前为止,我发现,对于任何不是popover的segue标识符,这些都是iOS进行的调用:
- prepareForSegue(在源控制器上)
- viewDidLoad(在目标控制器上)
- viewDidLoad(在目标控制器上)
- prepareForSegue(在源控制器上)
-(void)prepareViewController {
// initialization logic...
}
以及更改源控制器本身中的prepareForSegue方法:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
MyViewController *mvc = (MyViewController*)[segue destinationViewController];
// passing variable
// with segue style other than popover this called first than viewDidLoad
mvc.myProp1=@"prop1";
mvc.myProp2=@"prop2";
// viewWillAppear is not yet called
// so by sending message to controller
// the view is initialized
[mvc prepareViewController];
}
我不知道这是否是popover的预期行为,反正现在一切都正常了。我注意到Xcode的主细节模板(iPhone)的锅炉板代码使用以下模式来配置细节VC的视图:
我没有太多的爆米花经验;但是,如果上面的模式与显示在popover中的细节VC一起使用,那么在prepareForSegue方法中设置细节VC的属性时,细节VC的视图不会被配置吗?我遇到了同样的问题。调用viewdidload但不执行Segue您的修复也对我有效,所以谢谢,但这是一个奇怪的问题,因为它只是突然出现在我身上,即使我有其他几个弹出窗口工作正常,并且依赖prepareForSegue转发对象。这里也一样,有时在viewdidload之前调用prepareForSegue,有时在。。。感谢您的修复。我认为从情节提要调用segue时,在viewDidLoad之后会调用prepareForSegue,如果您使用-performSegueWithIdentifier:手动触发它,则是另一种方式。