如何将 UIImagePickerController 推送到 UINavigationController 中?

发布于 2024-10-22 19:00:40 字数 3213 浏览 0 评论 0原文

我在我的程序中的 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,

我该怎么办......

现在如果有人不清楚我的问题,可以再次问我,

I have following coding in my Program, in 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;
}

Where these three are different classes, now I want to use camera and album, so when I write coding as below on a button target, it won't work

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

I tried all the above ways but they are not working and showing UIImagePickerController,

now what should I do

if anyone in not clear from my question, can ask me again.....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

未蓝澄海的烟 2024-10-29 19:00:40

[self.view addSubview:imagePicker.cameraOverlayView] 怎么样

另外,您是否尝试过向 self.view 添加任何其他视图?我想知道 imagePicker 是否已添加,但未加载,因为您添加到的视图未显示。

What about [self.view addSubview:imagePicker.cameraOverlayView]

Also, have you tried adding any other view to your self.view? I wonder if the imagePicker is being added, but is not loaded because the view you are adding it to is not being displayed.

戏蝶舞 2024-10-29 19:00:40

您是否尝试通过导航控制器之一呈现 imagePicker?

来自 参考

呈现用户界面通过调用当前活动视图控制器的 presentModalViewController:animated: 方法,将配置的图像选择器控制器作为新的视图控制器传递。在 iPad 上,您也可以使用弹出框来呈现用户界面,如 initWithContentViewController:UIPopoverController 类参考中的“呈现和关闭弹出框”中所述。

Did u try presenting the imagePicker through one of the navigation controllers?

From Reference

Present the user interface by calling the presentModalViewController:animated: method of the currently active view controller, passing your configured image picker controller as the new view controller. On iPad, you can alternatively present the user interface using a popover as described in initWithContentViewController: and “Presenting and Dismissing the Popover” in UIPopoverController Class Reference.

颜漓半夏 2024-10-29 19:00:40

如果使用 GKImagePicker:

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

If using GKImagePicker:

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

薯片软お妹 2024-10-29 19:00:40

你总是可以做:

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

  self.show(cam, sender: nil)

为我工作

You can always do:

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

  self.show(cam, sender: nil)

worked for me

盛夏已如深秋| 2024-10-29 19:00:40

您是否尝试通过 tabBarController 呈现 UIImagePickerControllerUITabBarController 继承自 UIViewController)?假设您为 AppDelegate 创建了一个单例,并且 tabBarController 是 AppController 的一个属性(为了方便起见,我在下面添加了单例的示例代码),代码将如下所示:

AppController.h< /strong>

#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 ...
}

祝您好运,编码愉快!

Did you try presenting the UIImagePickerController through the tabBarController (UITabBarController inherits from UIViewController)? Assuming that you created a singleton for for your AppDelegate and that the tabBarController is a property of the AppController (for your convenience I added a sample code for the singleton below), the code would look something like this:

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

Now in your class, on the useCamera method call the imagePicker by doing this:

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

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

  // YOUR RELEASE CODE ...
}

Good luck and happy coding!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文