你能解释为什么这个NavigationController设置有效

时间:2013-02-13 17:24:11

标签: iphone ios uiviewcontroller uinavigationcontroller modalviewcontroller

我正在尝试了解如何设置NavigationController。我不明白为什么这个代码适用于pushViewController和presentModalViewController。我认为它必须是一个或另一个。

对于上下文,这是一个创建UIImagePickerController的UIViewController。之后有两个视图控制器,第一个(EditPictureViewController)编辑图像本身,第二个编辑属性。相信我应该使用presentModalViewController。

...还有一种方法可以不关闭模态视图控制器,这样我就可以在EditPictureViewController上有一个重拍图片按钮吗?

感谢。

- (void)viewDidLoad {

    [super viewDidLoad];
    self.navController = [[UINavigationController alloc] init]; }

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    [self dismissModalViewControllerAnimated:NO];
    EditPictureViewController *viewController = [[EditPictureViewController alloc] initWithImage:image];
    [viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self.navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self.navController pushViewController:viewController animated:NO];
    [self presentModalViewController:self.navController animated:YES]; }

2 个答案:

答案 0 :(得分:0)

这会将EditPictureViewController推送到NavigationController的视图堆栈。

[self.navController pushViewController:viewController animated:NO];

然后在这里展示NavigationController:

[self presentModalViewController:self.navController animated:YES];

我的意思是,你所做的只是从视图控制器呈现一个模态视图,而这个模态碰巧是一个NavigationController。

答案 1 :(得分:0)

你所拥有的设置不是“正常的方式。标准的范例是在didFinishPickingMediaWithInfo:方法中创建导航控制器,并将其根视图控制器设置为viewController,而不是推动它。你通常会想到“推”到移动到下一个控制器,而你正在做的只是以非标准的方式设置根视图控制器。你也应该使用当前的方法来呈现和解除模态视图控制器 - 那些你正在使用的是折旧。我不确定你是否也需要设置这两种过渡样式。尝试评论一下,看它是否仍然有用。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    [self dismissViewControllerAnimated:NO completion:nil];
    EditPictureViewController *viewController = [[EditPictureViewController alloc] initWithImage:image];
    self.navController = [[UINavigationController alloc] initWithRootViewController:viewController];
    [viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self.navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self presentViewController:self.navController animated:YES completion:nil]; 

}