我使用的代码是:

mediaLibraryPopover = [[UIPopoverController alloc] 
                        initWithContentViewController:avc];
[self.mediaLibraryPopover presentPopoverFromRect:[theButton bounds] 
                          inView:theButton 
                          permittedArrowDirections:UIPopoverArrowDirectionAny 
                          animated:YES];

我在Xcode 7中得到了这个警告:

UIPopoverController已弃用,iOS 9.0中第一个弃用-UIPopoverController已弃用.弹出框现在实现为UIViewController演示.使用UIModalPresentationPopover和UIPopoverPresentationController的模态表示样式.

推荐答案

显示视图控制器不再需要UIPopoverController.

您可以使用以下代码:

avc.modalPresentationStyle = UIModalPresentationPopover;
avc.popoverPresentationController.sourceView = theButton;
[self presentViewController:avc animated:YES completion:nil];

UIModalPresentationPopover

在水平规则的环境中

在水平紧凑的环境中,此选项的行为与

iOS 8.0及更高版本提供.

参考文献UIModalPresentationStyle Reference


您需要设置sourceViewbarButtonItem属性,否则它将崩溃,并显示以下消息:

***由于未捕获的异常"NSGenericeException"而终止应用程序,原因是:"UIPopoverPresentationController(***)应具有非nil

要正确锚定popover箭头,还需要指定sourceRect属性.

avc.modalPresentationStyle                   = UIModalPresentationPopover;
avc.popoverPresentationController.sourceView = self.view;
avc.popoverPresentationController.sourceRect = theButton.frame;
[self presentViewController:avc animated:YES completion:nil];

更多详细信息,请参阅sourceViewsourceRect.

Objective-c相关问答推荐

iOS 7 表格视图无法自动调整内容插入

iOS9 - 这个应用程序正在从后台线程修改自动布局引擎 - 在哪里?

NSBundle pathForResource 为 NULL

UITableView 无限滚动

反编译 Objective-C 库

如何编写 Objective-C 完成块

在 iOS 和 Mac OS X 应用程序中使用 C++

避免NSArray 在被枚举时发生Mutations

NSString:从字符串中删除 UTF-8 重音的简单方法?

如果目录不存在,是否有更安全的方法来创建目录?

UIViewController 的 prefersStatusBarHidden 不起作用

深入了解保留周期

无法将 searchBar 设置为 firstResponder

如何减小使用 UIImagePickerController 创建的视频的文件大小?

UIView: opaque vs. alpha vs. opacity

如何在今天午夜获取 NSDate 对象?

NSNumber 和 NSInteger 有什么区别?

将自定义子视图(在 xib 中创建)添加到视图控制器的视图 - 我在做什么错

Xcode 警告未使用属性访问结果 - getter 不应用于副作用

Xcode 在调试时判断表达式