1

我有一个应用程序,我的主视图嵌入在导航控制器中。从那里,按钮推到其他视图控制器上。这一切都很好。但是,它推送的视图控制器之一会更新根的值之一并再次呈现它。但是这一次,它只呈现了没有导航控制器的 ViewController,当然,按下按钮返回会以崩溃告终。希望这张照片能帮助理解我的问题。按下回车其实没什么大不了的,我只是在键盘返回时调用这个函数。

返回主控制器的代码:

-(void)createNewMain:(NSString*)newAddress {
    ViewController* newController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainView"];
    newController.labelText = newAddress;
    newController.connected = self.connected;
    [self presentViewController:newController animated:YES completion:nil];  
}

在此处输入图像描述

4

3 回答 3

3

问题很简单,您正在以模态方式呈现实例化的视图控制器。

代替

[self presentViewController:newController animated:YES completion:nil];

[self.navigationController pushViewController:newController animated:yes];

此外,您可以从情节提要中进行转场。当 segue 执行时,它将创建一个新实例,并且不会使用先前创建的实例。

注意:如果您确实不需要创建新实例,请考虑使用委托在对象之间交换信息。

于 2013-06-02T10:02:45.617 回答
1

使用委托将您想要的预期/所需消息从您的 Pi 控制器传递到您的根视图控制器,并根据消息进行设置。您不需要从那里创建根视图控制器的新实例。您始终可以通过使用从导航堆栈中的任何位置返回根视图控制器

[[self navigationController] popToRootViewControllerAnimated:YES];
于 2013-06-02T08:41:42.157 回答
1

您真的不想“返回”到根控制器的新实例。要正确返回根控制器,您需要做的是从导航控制器的堆栈中弹出所有其他控制器,如下所示:

[self.navigationController popToRootViewControllerAnimated:YES];

于 2013-06-02T08:29:40.147 回答