iOS - Storyboard - 弹出的委托

发布于 2024-12-15 22:41:45 字数 95 浏览 4 评论 0原文

我在我的 ipad 应用程序中使用情节提要,并成功地能够进行过渡、使用 segues 等。 目前,我通过单击按钮显示弹出视图控制器。我想检测弹出窗口何时消失。 我该怎么做呢?

I'm using storyboard in my ipad application and successfully able to do transitions, use segues etc.
Currently I am showing pop over view controller on click of a button. I want to detect when the pop over dismisses.
How can I do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

疯狂的代价 2024-12-22 22:41:45

这是我所做的:

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

Here is what I did:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"popover"])
    {
        UIStoryboardPopoverSegue *pop = (UIStoryboardPopoverSegue*)segue;
        pop.popoverController.delegate = self;
    }
}
你怎么敢 2024-12-22 22:41:45

UIPopoverController

现在,我发现您正在谈论 UIPopoverController,步骤如下:

  1. 使用适当的委托设置 UIPopoverController(我假设“发送者”视图控制器)

  2. 让您的“sender”符合 UIPopoverControllerDelegate

  3. 实现 – popoverControllerDidDismissPopover: 消息并在此处提供任何检测逻辑

  4. 实现 -prepareForSegue:sender: 并使用 segue 的 destinationController 来获取引用并设置委托,如下所示:

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


模态视图控制器

  1. 将委托添加到正在呈现的视图控制器
  2. 如果尚未命名您的 segue
  3. 让您的基本视图控制器实现 -prepareForSegue:sender: (请参阅 UIViewController文档
  4. prepareForSegue:sender: 中将发送视图控制器分配为模式视图控制器的委托:
  5. 在调用 dismissModalViewControllerAnimated 之前或之后立即在委托上调用所需的方法:

这就是我的处理方法。我还建议有一个正式的协议来符合您的发送视图控制器。

UIPopoverController

Now with my revelation that you're talking about a UIPopoverController, here are the steps:

  1. Setup the UIPopoverController with an appropriate delegate (I'm assuming the "sender" view controller)

  2. Have your "sender" conform to the UIPopoverControllerDelegate

  3. Implement the – popoverControllerDidDismissPopover: message and have any detection logic here

  4. Implement - prepareForSegue:sender: and use the segue's destinationController to both get a reference and set the delegate, something like below:

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


Modal View Controller

  1. Add a delegate to the view controller that is being presented
  2. Name your segue if you haven't already
  3. Have your base view controller implement - prepareForSegue:sender: (refer to the UIViewController documentation)
  4. Assign the sending view controller as the modal view controller's delegate in prepareForSegue:sender:
  5. Call a desired method on the delegate immediately before or after you call dismissModalViewControllerAnimated:

That is how I would approach this. I would also recommend having a formal protocol to conform your sending view controller with.

柒七 2024-12-22 22:41:45

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

@property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue;

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

在界面中,编写以下代码:

- (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];        

Create a segue in view controller:

@property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue;

In XIB, create an identifier called "popover" for the view.

In Interface, write the following code:

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

Write the following code to dismiss the pop over by coding:

[self.popSegue.popoverController dismissPopoverAnimated:YES];        
知你几分 2024-12-22 22:41:45

由于 UIStoryboardPopoverSegue 在 iOS 9 中已弃用,因此您可以使用 UIStoryboardPopoverPresentationSegue

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

Swift:

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

    destVC.popoverPresentationController?.delegate = self
}

Since UIStoryboardPopoverSegueis deprecated in iOS 9, you can use a UIStoryboardPopoverPresentationSegue.

Then in prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)you can set the delegate like this:

Swift:

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

    destVC.popoverPresentationController?.delegate = self
}
清风疏影 2024-12-22 22:41:45

该问题的 Objective-C 代码如下。

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

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

An Objective-C code for the question is below.

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

- (BOOL) popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController
{
    return NO;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文