【发布时间】:2014-06-19 03:01:46
【问题描述】:
我有一个带有 2 个屏幕的简单应用。 当我按下一个按钮从第一个到第二个时,一切都成功执行(包括动画)。但是,当我单击第二个屏幕上的后退按钮时,会收到以下警告:
Warning: Attempt to present <getTextViewController: 0x8f6aa30> on <SecondViewController: 0x946cc80> whose view is not in the window hierarchy!
编辑:请不要向我提出有关上述警告的其他问题 - 我已经看到了这些问题,它们提到了其他问题。
但是,它仍会切换回第一个屏幕。然而,segue 的动画并没有执行。 另外:当我返回第一个屏幕时,第一个屏幕中的信息(例如输入的文本)会保留,而每次屏幕出现时第二个屏幕中的信息都会重置。
我是这样称呼这两种操作的:
Segue from View 1 to View 2:
Name: F21, Style: Modal, Transition: Cross Dissolve, Animation: True.
Segue from View 2 to View 1:
Name: F12, Style: Modal, Transition: Cross Dissolve, Animation: True.
getTextViewController.m 中的代码(视图 1):
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"F21"]){
UIViewController *v = [segue destinationViewController];
[self dismissViewControllerAnimated:NO completion:nil];
v = self;
}
}
-(void)performSegue:(NSString*)str{
[self performSegueWithIdentifier:str sender:self];
}
//In some other method:
[self performSegue:@"F21"];
SecondViewController.m 中的代码(视图 2):
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"F12"]){
UIViewController *v = [segue destinationViewController];
[self dismissViewControllerAnimated:NO completion:nil];
v = self;
}
}
-(void)performSegue:(NSString*)str{
[self performSegueWithIdentifier:str sender:self];
}
- (IBAction)goBack:(id)sender {
[self performSegue:@"F12"];
}
我非常感谢任何帮助以了解为什么第一个 segue 有效而第二个无效。
谢谢,
院长
注意:这是完整的项目 - https://github.com/dean13-meet/firstIOSApp 编辑:更新了 git。
【问题讨论】:
-
您的 github 项目缺少 getTextViewController .h 和 .m 文件。
-
你为什么还需要一个 back segue?这个功能是内置的!您收到错误消息是因为您关闭了您的
SecondVC,然后尝试从已关闭的VC中呈现一个新的VC。 -
不要使用 segue 从第二个视图控制器返回到第一个视图,只需使用您使用过的 [self dismissViewControllerAnimated:NO completion:nil] 方法。
标签: ios objective-c segue modalviewcontroller