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 中将 contentView 居中
iOS 7 上 UIPopoverController 后面的色调