7

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

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

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

所以问题是:如何像XCode 5 上的视频一样为 iPhone 制作弹出框?

这是我正在努力解决的 XCode 5 项目。

4

1 回答 1

14

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

  • 创建一个类别以在 iPhone 上使用 popover(更多详细信息请点击此处

    //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 必须保存在一个实例变量中,更多细节在这里

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 及更高版本上测试正常。

于 2013-11-27T15:05:53.477 回答