2012-04-18 57 views
2

我有一个可以显示几个弹出窗口的viewcontroller。不是在同一时间。哪一个是最好的方法来知道在popoverControllerDidDismissPopover哪个popover被解雇?如何知道哪个popover正在被解雇

我必须对正在被解雇的popover做不同的操作。

非常感谢

回答

4

像这样的东西应该工作。 (此代码是不完整的 - 我想你知道基本的内存和一流的管理和其他的东西,所以我重点关注的实际问题)

在你的类保留一些实例变量来引用存储到您所创建

@interface MyClass : NSObject <UIPopoverControllerDelegate> { 
    UIPopoverController *popover1; 
    UIPopoverComtroller *popover2; 
} 
的popovercontrollers

像往常一样初始化你的popovercontrollers,并保存popover1和popover2中每个人的参考。

然后在你执行UIPopoverDelegate协议:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    if(popoverController == popover1) { 
     //popover1 was dismissed 
    } else if (popoverController == popover2) { 
     //popover2 was dismissed 
    } 
} 

编辑:看你的意见,似乎你的意思,你只使用一个popovercontroller和替换它与不同UIViewControllers内容视图。

如果是这种情况,我建议你在这些特定的UIViewController中执行任何操作,以这种方式影响你的应用程序的状态。

然后,一旦popover被解散,你重新加载你的原始视图与新的刷新状态。

或者您改为使用UIPopoverController的两个不同实例来代替。

+0

非常感谢杰克。如果我有两个同时运行的弹出式,我会使用,但情况并非如此。我在屏幕上只有一个弹出窗口,我需要一些方法来知道我的视图控制器所具有的不同窗口中的哪一个在屏幕上。 – Carlos 2012-04-18 14:49:14

+0

不,他们不需要同时运行,这个代码是用来显示两个弹出窗口(每次一个)并确定哪一个被用户解散,就像你所要求的。如果这不符合你的代码,我建议你发布一些代码,以便我们可以确切地看到你在做什么。 – 2012-04-18 15:49:32

+0

我想我明白你现在正在尝试什么,我在上面添加了一个小编辑...... – 2012-04-18 16:03:45

1

您传递其酥料饼在popoverControllerDidDismissPopover:被解雇。用它来确定你想要在每种情况下做什么。

您可能希望将您的UIPopoverController实例存储为任何对象呈现它们的ivars,然后仅将它们与您在委托方法中传递的值进行比较。

+0

嗯,我没有看到它...我不是在同一时间展示的。我有一个popover选择日期和另一个选择不同的值。当我在popoverControllerDidDismissPopover上时,我怎么知道popover被解散是日期还是选项?现在我正在使用NSString实例变量来了解屏幕上的弹出窗口... – Carlos 2012-04-18 10:26:52

+0

您在'popoverControllerDidDismissPopover:'中传递了弹出窗口 - 这是该方法的唯一参数。你在挣扎什么? – mattjgalloway 2012-04-18 11:39:50

+1

也许我的问题不清楚。事实上,我需要知道popover中的哪一个viewcontroller,然后,关于这个,在解散时做一件或另一件事。 – Carlos 2012-04-18 14:51:16

3

这就是在Xcode 6.3 beta 3中的Swift中,在Objective-C中应该是类似的

  1. 您提交的视图本身应该有一个ViewController

    import UIKit 
    
    class MenuBookmarksViewController: UITableViewController { 
    } 
    
  2. 扩展添加到UIViewController类或放置将要展示你的popovers的UIViewController内的代码(下)

    extension UIViewController: UIPopoverPresentationControllerDelegate { 
        public func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) { 
         if popoverPresentationController.presentedViewController as? MenuBookmarksViewController != nil { 
          ///do your stuff 
         } 
        } 
    } 
    
相关问题