UIImagePickerController作为后面显示的应用程序和导航控制器的主视图控制器

时间:2013-02-08 19:00:38

标签: ios uinavigationcontroller uiimagepickercontroller

我的目标是创建一个应用程序,该应用程序将相机作为第一个出现的视图,然后在拍照后转到导航控制器中的一系列视图。我最想要的应用是Snapchat。

这几天我一直在努力解决这个问题,这就是我所尝试的(这些似乎都不起作用)。

  1. Root View(内部导航控制器)呈现Modal UIImagePickerController,然后转到下一个视图。 [不分段]

  2. 与1相同,但忽略模态控制器然后segue。 [有点作品。加载UIImagePicker时以及转换到下一个视图时显示背景]

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

  4. 使用3并且不要嵌入导航控制器(推理:因为UIImagePickerController是导航控制器的子类,所以应该可以工作)。 [不起作用。]

  5. 我已经尝试了大约10种其他方法来做同样的事情,它们属于这一类:[有点作品。大多数崩溃或看起来很丑陋]。

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

    再次,如果这是令人困惑的,只需打开Snapchat并玩流程(相同的流程,对于实际的应用程序完全不同的想法 - 即不是一个不受欢迎的克隆:)

    谢谢!

2 个答案:

答案 0 :(得分:1)

如果您从导航控制器的根视图控制器以模态方式显示图像选择器而没有动画,那么选择器就是您将首先看到的。当你解雇它时,你会看到根控制器,它应该是你想要在选择器消失时首先看到的东西。那是你要的吗?此代码将位于根控制器中:

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

答案 1 :(得分:0)

第一意见:

制作一个mainController并添加按钮(取决于你有多少个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];