Iphone 你能解释一下为什么这个NavigationController设置有效吗

Iphone 你能解释一下为什么这个NavigationController设置有效吗,iphone,ios,uiviewcontroller,uinavigationcontroller,modalviewcontroller,Iphone,Ios,Uiviewcontroller,Uinavigationcontroller,Modalviewcontroller,我正在尝试了解如何设置NavigationController。我不明白为什么这段代码同时适用于pushViewController和presentModalViewController。我想一定是这样或那样 对于上下文,这是一个创建UIImagePickerController的UIViewController。之后有两个视图控制器,第一个(EditPictureViewController)编辑图像本身,第二个编辑属性。相信我应该使用presentModalViewController …还

我正在尝试了解如何设置NavigationController。我不明白为什么这段代码同时适用于pushViewController和presentModalViewController。我想一定是这样或那样

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

…还有没有一种方法可以不关闭模式视图控制器,这样我就可以在EditPictureView控制器上有一个“重拍图片”按钮

谢谢

- (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]; }

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

[self.navController pushViewController:viewController animated:NO];
然后在此处显示NavigationController:

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

我的意思是,您所做的只是从视图控制器显示一个模式视图,而该模式恰好是导航控制器。

您的设置不是“这是正常的做法。标准范例是在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]; 

}

啊。让我确定我明白了。第一行将其添加到导航控制器,而第二行则显示导航控制器。是这样吗?