使用 XCode 5 的 iPhone 弹出窗口视图

Posted

技术标签:

【中文标题】使用 XCode 5 的 iPhone 弹出窗口视图【英文标题】:Popover view for iPhone using XCode 5 【发布时间】:2013-10-08 03:20:32 【问题描述】:

我想重用this video 中描述的 iPhone 弹出框,这正是我所需要的。

问题是我无法像视频中那样将UIViewController 属性绑定到弹出框的UIViewController

视频的一个不同之处在于它是使用 XCode 4.2 制作的,而我使用的是 XCode 5。

所以问题是:如何在 XCode 5 上的video 中为 iPhone 制作弹出框?

Here is the XCode 5 project I am struggling with.

【问题讨论】:

我在 iPhone 4s ios8.1 模拟器上测试了这个弹出框功能,我得到一个黑屏阻止应用程序:(显然下面的代码在 iOs8 上不再工作了...... 【参考方案1】:

我想出了一种方法让 popover 以编程方式在 iPhone 和 iPad 上工作!

创建一个类别以在 iPhone 上提供弹出框(更多详细信息here)

//UIPopover+Iphone.h
@interface UIPopoverController (overrides)
+ (BOOL)_popoversDisabled;
@end

//UIPopover+Iphone.m
@implementation UIPopoverController (overrides)
+ (BOOL)_popoversDisabled  return NO;

@end

创建将显示弹出框并实现它调用的方法的按钮

ExampleUIViewController.h

@interface ExampleViewController : UIViewController <UIPopoverControllerDelegate>
    @property (strong, nonatomic) UIButton *detailButton;
    @property (nonatomic, retain) IBOutlet UIPopoverController *poc;

UIPopoverController poc 必须保存在一个实例变量中,更多细节here。

ExampleUIViewController.m

- (void)viewDidLoad 
    _detailButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [_detailButton addTarget:self
                action:@selector(showPop:)
      forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_detailButton];


-(void)showPop:(UIButton *)button 
   UIViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
   self.poc = [[UIPopoverController alloc] initWithContentViewController:detailsViewController];
   [self.poc setDelegate:self];
   [self.poc presentPopoverFromRect:_detailButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

创建 UIViewController,它将包含弹出框内显示的内容(在示例中称为 DetailsViewController)

只需在您的项目中通过右键单击 -> 新建文件 -> 目标 c 类 -> UIViewController 并勾选“使用 XIB”框来创建它。

然后点击按钮时会出现一个弹出框。

在 iOs5 及更高版本上测试正常。

【讨论】:

如何将任何对象添加到此弹出视图 弹出框的内容,在我的例子中,是DetailsViewController。因此,要将任何内容添加到弹出视图中,请将其添加到您的 DetailsViewController。 是的,我知道了,我用过这个,[myViewController.view addSubviews:objects]; 在***.com/questions/18205903/… 中已被Apple 接受。至于我自己,我还没有将我的应用提交到 App Store。 我在 iPhone 4s iOs8.1 模拟器上测试了这个 popover 功能,我得到一个黑屏阻止应用程序:( 显然这个代码不适用于 iOs8 并且可能以上所有版本都不起作用......

以上是关于使用 XCode 5 的 iPhone 弹出窗口视图的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 上显示弹出透明窗口的最佳方法?

Xcode安全区域故障与iPhone SE和4s

如何在 xcode 中重新启用 CoreLocation 提示?

如何在 iPhone (iOS 5) 上的音乐应用程序中为 UITableViewCell 创建一个弹出窗口

XCode5 中 UITableviewCell 的弹出视图

无法使用 iOS 4.3.5 设备在 Xcode 4.1 中构建源代码