Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIImagePickerController作为应用程序的主视图控制器和导航控制器,如下所示_Ios_Uinavigationcontroller_Uiimagepickercontroller - Fatal编程技术网

Ios UIImagePickerController作为应用程序的主视图控制器和导航控制器,如下所示

Ios UIImagePickerController作为应用程序的主视图控制器和导航控制器,如下所示,ios,uinavigationcontroller,uiimagepickercontroller,Ios,Uinavigationcontroller,Uiimagepickercontroller,我的目标是创建一个应用程序,该应用程序将摄像头作为第一个视图显示,然后在拍照后转到导航控制器中的一系列视图。与我想要制作的最接近的现有应用程序是Snapchat 我已经为此挣扎了好几天,以下是我尝试过的(这些似乎都不起作用) 根视图(导航控制器内部)显示模式UIImagePickerController,然后切换到下一个视图。[不segue] 与1相同,但关闭模态控制器,然后继续。[有点有效。在加载UIImagePicker和转换到下一个视图时显示背景] 使用UIIMagePickerContr

我的目标是创建一个应用程序,该应用程序将摄像头作为第一个视图显示,然后在拍照后转到导航控制器中的一系列视图。与我想要制作的最接近的现有应用程序是Snapchat

我已经为此挣扎了好几天,以下是我尝试过的(这些似乎都不起作用)

  • 根视图(导航控制器内部)显示模式UIImagePickerController,然后切换到下一个视图。[不segue]

  • 与1相同,但关闭模态控制器,然后继续。[有点有效。在加载UIImagePicker和转换到下一个视图时显示背景]

  • 使用UIIMagePickerController的子类作为根视图。[工作但不允许显示导航栏,否则在显示UIIMagePickerController时崩溃][

  • 使用3,不要嵌入导航控制器(理由:因为UIImagePickerController是导航控制器的一个子类,所以应该可以工作)。[不工作。]

  • 我尝试过10种其他方法来做同样的事情,它们属于这一类:[有点有效。大多数崩溃或看起来很丑]

    最好的方法是什么?任何帮助或建议都将不胜感激

    同样,如果这让人困惑,只需打开snapchat并使用流(相同的流,对于实际应用完全不同的想法-即,不是snapchat克隆:)

    谢谢!

    第一条建议:

    制作一个主控制器并添加按钮(取决于您有多少个viewController),单击按钮时,每个按钮将加载不同的viewController

    // appDelegate.h
    
    @property (strong, nonatomic) UIWindow *window;
    
    @property (strong, nonatomic) MainViewController *mainController;
    
    //appDelegate.m
    
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    
    self.mainController = [[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    
    
    //each button clicked has following IBAction:
    
    -(IBAction)button1Clicked:(id)sender
    
    {
    
            FirstViewController *firstVC = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:[NSBundle mainBundle]];
            UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:firstVC]autorelease];
            [self presentModalViewController:navController animated:NO];
            [addVC release];
    }
    
    //in FirstViewController.m
    
    -(void)viewDidLoad 
    
    {
    
            [super viewDidLoad];
    
            self.title = @"xxxx ";
    
            self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
                                target:self action:@selector(cancel_Clicked:)]autorelease];
    
    }
    
    -(void) cancel_Clicked:(id)sender {
    
            [self dismissModalViewControllerAnimated:YES];
    }
    
    注:

    要将ViewController嵌入导航控制器中,必须使用以下代码

    UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:firstVC]autorelease];
    

    如果您从导航控制器的根视图控制器以无动画的方式呈现图像选择器,则选择器是您将首先看到的。当您关闭它时,您将看到该根控制器,它应该是您希望在选择器离开时首先看到的。这是您想要的吗?此代码将位于根控件中勒:

    -(void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
        static int first = 1;
        if (first) {
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.sourceType = 0;
            [self presentViewController:picker animated:NO completion:nil];
            first = 0;
        }
    }
    

    实际上我现在就这么做了,但是在模态弹出之前我看到了背景视图控制器。另外,在取消模态之后,在切换到下一个推送视图之前,我再次看到背景视图控制器。(我想我可以让背景视图控制器成为下一个要推送的控制器,但这仍然不能解决第一个问题。)@NV,我不知道你为什么会看到——我没有。你的动画设置为否?我甚至看不到根控制器视图的闪烁。