UIPopoverController 顶部的 UIBotton 消失

Posted

技术标签:

【中文标题】UIPopoverController 顶部的 UIBotton 消失【英文标题】:UIBotton on top of UIPopoverController disappears 【发布时间】:2012-03-04 15:24:12 【问题描述】:

我正在为 iPAD 制作照片幻灯片应用程序。我让用户通过弹出打开的 UIPopoverController 来选择他们的照片。在该弹出窗口中,我添加了一个名为“完成”的自定义按钮。现在在这里它变得古怪。首次启动弹出窗口时,您会看到“完成”按钮。当我点击相册时,完成按钮消失,如果我返回主照片选择页面,它也会从那里消失。查看屏幕截图。

这是我正在使用的代码。这里到底发生了什么?我认为我的代码是正确的。

-(IBAction)selectExitingPicture

    //Specially for iPAD
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];

    popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [popoverController presentPopoverFromRect:CGRectMake(0.0, 0.0, 400.0, 300.0) 
                             inView:self.view
           permittedArrowDirections:UIPopoverArrowDirectionAny 
                           animated:YES];




- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
    UINavigationItem *ipcNavBarTopItem;

    NSLog(@"Inside navigationController ...");

    // add done button to right side of nav bar
    doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain  target:self action:@selector(saveImages:)];

    bar = navigationController.navigationBar;
    [bar setHidden:NO];
    ipcNavBarTopItem = bar.topItem;
    ipcNavBarTopItem.rightBarButtonItem = doneButton;


【问题讨论】:

【参考方案1】:

您可以从传递给UINavigationControllerDelegate 方法的viewController 变量中获取您要查找的导航项,而不是自己找出顶部导航项。此外,您可以缓存doneButton,以避免每次图像选择器的顶视图控制器更改时重新创建它:

- (void)navigationController:(UINavigationController *)navigationController
        willShowViewController:(UIViewController *)viewController
        animated:(BOOL)animated

    if (!doneButton) 
        doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                      style:UIBarButtonItemStylePlain
                      target:self action:@selector(saveImages:)];
    

    viewController.navigationItem.rightBarButtonItem = doneButton;

【讨论】:

谢谢你,你太棒了!在过去的两天里,我一直在努力完成这个简单的事情,但没有成功。 没有问题,不客气 :) 您的代码的坏处可能是您修改了即将消失的视图控制器,而不是最重要的视图控制器(bar.topItem 不是t 在您请求时更新)。如果您处理了didShowViewController(而不是will...)中的更改,它应该可以工作。无论如何,这种方式似乎更简单,并且可以完成工作。

以上是关于UIPopoverController 顶部的 UIBotton 消失的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverController 没有箭头?

在 UIPopoverController 中将 contentView 居中

UIPopOverController 出现在错误的地方

iOS 7 上 UIPopoverController 后面的色调

如何在 iOS7 的 UIPopoverController 中更改导航栏背景/颜色?

在 iPad 上的 UIPopoverController 中显示 iPhone-View (iPhone SDK)