2013-06-02 28 views
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]; 
} 

enter image description here

+0

你真的只想从导航堆栈中弹出ConnectionViewController吗? –

回答

3

问题很简单,你模态呈现实例化视图控制器。

更换

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

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

而且,你可以做一个SEGUE做,从故事板。当segue执行时,它会创建一个新的实例,不会使用先前创建的实例。

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

+0

谢谢!我只有一个字符串被传回到根目录,所以我不想深入研究代表。然而,在故事板中,如果我从视图创建push segue,那么它是否不会影响从根控制器到视图的现有视图? – Carpetfizz

+0

不是。如果我们从第二个视图控制器到根视图控制器创建一个新的segue,则会创建一个新的实例。 –

1

你不是真的想“回归”到根控制器的新实例。你需要做的正确返回到根控制器什么是流行的导航控制器的堆栈所有其他的人是这样的:

[self.navigationController popToRootViewControllerAnimated:YES];

1

使用委派从你的皮传你想要的预期/所需的消息控制器添加到根视图控制器并根据消息进行设置。您不需要从那里创建根视图控制器的新实例。您可以随时回到你的根视图控制器从导航堆栈中的任何地方使用

[[self navigationController] popToRootViewControllerAnimated:YES];