Как вставить UIImagePickerController в UINavigationController? - PullRequest
2 голосов
/ 18 марта 2011

У меня есть следующая кодировка в моей Программе, в AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    myList = [[List alloc] init];
    mySettings = [[Settings alloc] init];
    myCriteria = [[Criteria alloc] initWithStyle:UITableViewStyleGrouped];

    first = [[UINavigationController alloc] initWithRootViewController:myList];
    second = [[UINavigationController alloc] initWithRootViewController:mySettings];
    third = [[UINavigationController alloc] initWithRootViewController:myCriteria]; 

    myTabBar = [[UITabBarController alloc] init];

    myTabBar.view.frame = CGRectMake(0,20,320,460);


    UITabBarItem *first1 = [[UITabBarItem alloc] initWithTitle:@"List" image:[UIImage imageNamed:@"list.png"] tag:0];
    UITabBarItem *second2 = [[UITabBarItem alloc] initWithTitle:@"My Profile" image:[UIImage imageNamed:@"settings.png"] tag:1];
    UITabBarItem *third3 = [[UITabBarItem alloc] initWithTitle:@"Criteria" image:[UIImage imageNamed:@"Criteria.png"] tag:2];


    UINavigationController *localNavigationController = [[UINavigationController alloc] initWithRootViewController:myTabBar];

    first.tabBarItem = first1;
    second.tabBarItem = second2;
    third.tabBarItem = third3;

    myControllerArray = [[NSArray alloc] initWithObjects:first, second, third, nil];

    [myTabBar setViewControllers:myControllerArray];
    [myTabBar setCustomizableViewControllers:myControllerArray];

    [self.window addSubview:myTabBar.view];

    // Add the view controller's view to the window and display.
   // [self.window addSubview:viewController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

Там, где эти три разных класса, теперь я хочу использовать камеру и альбом, поэтому, когда я пишу кодирование, как показано ниже для цели кнопки,это не будет работать

    - (void) useCamera
{

    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeCamera])
    {
        NSLog(@"If is true");
        UIImagePickerController *imagePicker =
        [[UIImagePickerController alloc] init];

    //  [self.navigationController pushViewController:imagePicker animated:YES];

        imagePicker.delegate = self;
        imagePicker.sourceType = 
        UIImagePickerControllerSourceTypeCamera;
        imagePicker.mediaTypes = [NSArray arrayWithObjects:
                                  (NSString *) kUTTypeImage,
                                  nil];
        imagePicker.allowsEditing = NO;

        [self.tabBarController setCustomizableViewControllers:[[NSArray alloc]initWithObjects:imagePicker,self,nil]];
        [self.tabBarController setViewControllers:[[NSArray alloc]initWithObjects:imagePicker,self,nil]];

        //[self presentModalViewController:imagePicker animated:YES]; I tried

        //[self.view addSubview:imagePicker.view]; I tried
        //self.view=imagePicker.view; I tried


        //[myScrollView addSubview:imagePicker]; I tried
        //[myView addSubview:imagePicker]; I tried

        [imagePicker release];

        newMedia = YES;
    }
}

Я перепробовал все вышеперечисленные способы, но они не работают и показывают UIImagePickerController,

, что мне теперь делать

, если кто-то неясно из моего вопроса, можете спросить меня снова .....

Ответы [ 5 ]

2 голосов
/ 14 июня 2012

А как же [self.view addSubview:imagePicker.cameraOverlayView]

Кроме того, вы пытались добавить какой-либо другой вид к вашему self.view? Интересно, добавлен ли imagePicker, но не загружен ли он, потому что представление, к которому вы добавляете его, не отображается.

1 голос
/ 18 марта 2011

Вы пытались представить imagePicker через один из контроллеров навигации?

Из Ссылка

Представить пользовательский интерфейс, вызвав метод presentModalViewController:animated: текущегоактивный контроллер представления, передавая сконфигурированный контроллер выбора изображений в качестве нового контроллера представления.На iPad вы можете альтернативно представить пользовательский интерфейс, используя всплывающее окно, как описано в initWithContentViewController: и «Представление и отклонение поповера» в UIPopoverController Ссылка на класс.

0 голосов
/ 23 мая 2018

Вы всегда можете сделать:

  let cam        = UIImagePickerController()
  cam.delegate   = self
  cam.sourceType = .camera

  self.show(cam, sender: nil)

работал для меня

0 голосов
/ 20 апреля 2016

При использовании GKImagePicker:

[self.view addSubview: self.imagePicker.imagePickerController.view];

0 голосов
/ 17 мая 2011

Вы пытались представить UIImagePickerController через tabBarController (UITabBarController наследуется от UIViewController)? Предполагая, что вы создали синглтон для вашего AppDelegate и что tabBarController является свойством AppController (для вашего удобства я добавил пример кода для синглтона ниже), код будет выглядеть примерно так:

AppController.h

#import <UIKit/UIKit.h>

@interface AppController : NSObject <UIApplicationDelegate> {
  UITabBarController *tabBarController;
}
// Class methods for convenience
+ (AppController *)sharedAppController;

// *** Properties
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) UITabBarController *tabBarController;

@end

AppController.m

#import "AppController.h"

static AppController *sharedInstance;

@implementation AppController

@synthesize window=_window;
@synthesize tabBarController;

#pragma mark - Initialization
- (id)init
{
  // Create the sharedInstance of the application
  if (sharedInstance) {
    NSLog(@"Error: You are creating a second AppController");
  }
  [super init];
  sharedInstance = self;

  return self;
}

+ (AppController *)sharedAppController
{
  return sharedInstance;
}

- (void)dealloc
{
  [_window release];
  [tabBarController release];
  [super dealloc];
}

Теперь в вашем классе, с помощью метода useCamera вызовите imagePicker, выполнив следующее:

- (void)useCamera
{
  // YOUR CODE ...

  // Place image picker
  [[[AppController sharedAppController] tabBarController] 
   presentModalViewController:imagePicker animated:YES];

  // YOUR RELEASE CODE ...
}

Удачи и удачного кодирования!

...