使用导航控制器加载视图?

时间:2013-06-02 07:01:30

标签: objective-c

我有一个应用程序,我的主视图嵌入在导航控制器中。从那里,按钮推到其他视图控制器上。一切正常。但是,其中一个视图控制器会推动更新其中一个根值并再次显示它。但是这一次,它只显示没有导航控制器的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];  
}

enter image description here

3 个答案:

答案 0 :(得分:3)

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

替换

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

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

此外,您可以通过故事板制作一个segue。当segue执行时,它将创建一个新实例,并且不会使用先前创建的实例。

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

答案 1 :(得分:1)

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

[self.navigationController popToRootViewControllerAnimated:YES];

答案 2 :(得分:1)

使用委派将您想要的预期/必需消息从Pi Controller传递到Root View Controller并根据消息进行设置。您无需从那里创建Root View Controller的新实例。您始终可以使用

从导航堆栈中的任何位置返回到根视图控制器
[[self navigationController] popToRootViewControllerAnimated:YES];