iOS - 故事板 - 代表弹出窗口

时间:2011-11-17 16:19:12

标签: ios uipopovercontroller storyboard

我在我的ipad应用程序中使用storyboard并成功完成转换,使用segues等。 目前我在点击按钮时显示弹出视图控制器。我想检测一下流行音乐何时解散。 我该怎么办?

5 个答案:

答案 0 :(得分:14)

这是我做的:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"popover"])
    {
        UIStoryboardPopoverSegue *pop = (UIStoryboardPopoverSegue*)segue;
        pop.popoverController.delegate = self;
    }
}

答案 1 :(得分:7)

UIPopoverController

现在我的启示是你在谈论UIPopoverController,以下是步骤:

  1. 使用适当的委托设置UIPopoverController(我假设“发件人”视图控制器)
  2. 让您的“发件人”符合UIPopoverControllerDelegate
  3. 实施– popoverControllerDidDismissPopover:消息,并在此处有任何检测逻辑
  4. 实施- prepareForSegue:sender:并使用segue的destinationController获取引用并设置委托,如下所示:

    ((MyViewController *)segue.destinationController).delegate = self;


  5. 模态视图控制器

    1. 将代理添加到正在呈现的视图控制器
    2. 如果您尚未
    3. ,请命名您的segue
    4. 让您的基本视图控制器实现- prepareForSegue:sender:(请参阅UIViewController documentation
    5. prepareForSegue:sender:
    6. 中将发送视图控制器指定为模态视图控制器的委托
    7. 在致电dismissModalViewControllerAnimated:
    8. 之前或之后立即在代表上调用所需方法

      这就是我接近这个的方法。我还建议使用正式的协议来使您的发送视图控制器符合。

答案 2 :(得分:4)

在视图控制器中创建一个segue:

@property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue;

在XIB中,为视图创建一个名为“popover”的标识符。

在Interface中,编写以下代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if( [[segue identifier] isEqualToString:@"popover"] )
    {
        //[[segue destinationViewController] setDelegate:self];
        NSLog(@"%@",[[segue destinationViewController] viewControllers]);
        self.popSegue = (UIStoryboardPopoverSegue*)segue;
.
.
.
}

编写以下代码以通过编码来解除弹出:

[self.popSegue.popoverController dismissPopoverAnimated:YES];        

答案 3 :(得分:1)

由于iOS 9中不推荐使用UIStoryboardPopoverSegue,因此您可以使用UIStoryboardPopoverPresentationSegue

然后在prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)中,您可以像这样设置委托:

夫特:

if let identifier = segue.identifier where identifier == "showPopover" {
    let destVC = segue.destinationViewController as! UIViewController

    destVC.popoverPresentationController?.delegate = self
}

答案 4 :(得分:0)

问题的Objective-C代码如下。

if ([segue.identifier isEqualToString:@"home_login"]) 
{
   UIViewController *dest = segue.destinationViewController;
   dest.popoverPresentationController.delegate = self;
}

- (BOOL) popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController
{
    return NO;
}