我正在尝试了解如何设置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]; }
答案 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];
}