【问题标题】:How to dismiss the UIPopoverController?如何关闭 UIPopoverController?
【发布时间】:2012-12-28 08:13:13
【问题描述】:

我创建了一个UIPopoverController 并在单击UIButton 时将其添加到视图控制器,如下所示

- (void)viewDidLoad
{
    [super viewDidLoad];
    controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];
    popoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
}

- (IBAction)showPopover:(UIButton *)sender
{
    if ([popoverController isPopoverVisible]) {
        [popoverController dismissPopoverAnimated:YES];
    } else {
               CGRect popRect = CGRectMake(self.btnShowPopover.frame.origin.x,
                                self.btnShowPopover.frame.origin.y,
                                self.btnShowPopover.frame.size.width,
                                self.btnShowPopover.frame.size.height);
          [popoverController presentPopoverFromRect:popRect
                                       inView:self.view
                     permittedArrowDirections:UIPopoverArrowDirectionAny
                                     animated:YES];
    }
}

btnShowPopoverviewcontroller 中的UIButtonpopoverControllerUIPopoverController

点击按钮时popovercontroller 看起来很好。

但是当我点击secondviewcontroller中的UIButton时它不会被关闭

我为此使用了以下代码

-(IBAction)y:(id)sender{
    fs =  [[Firstviewcontroller alloc] initWithNibName:@"FIrstscreen" bundle:[NSBundle mainBundle]];
    [fs.popoverController dismissPopoverAnimated:TRUE];
}

但它没有用。

在添加到popovercontroller 的视图控制器中单击按钮时如何关闭popovercontroller

【问题讨论】:

    标签: iphone ios objective-c ipad uipopovercontroller


    【解决方案1】:

    您正在分配Firstviewcontroller 的新实例,因此它不会关闭前一个实例的弹出框。

    在显示弹出框时需要传递旧实例,例如:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];
        popoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
        [controller setFs:self]
    }
    

    然后像这样解雇:

    -(IBAction)y:(id)sender
    {
        [fs.popoverController dismissPopoverAnimated:TRUE];
    }
    

    【讨论】:

    • [controller setFs:self],报错,显示弹窗时如何传递旧实例
    • @NAZIK:还有问题吗?
    • @ Midhun MP,是的,错误 - 在“PopOverViewController *”类型的对象上找不到 popovercontroller - 现在该怎么办?
    • @NAZIK:请再次检查您的代码,我认为您犯了一个错误。检查是否通过 [... setFS:self] 并检查 fs 的 typr,应该是 Firstviewcontroller
    • 在你的 SecondViewController 类的@interface 中声明 fs 并创建一个属性 @property (nonatomic, assign) Firstviewcontroller *fs; 如果你使用的是非弧并合成它
    【解决方案2】:

    苹果文档:

    popover 控制器不会调用此方法来响应对dismissPopoverAnimated: 方法的编程调用。如果您以编程方式关闭弹出框,则应在调用 dismissPopoverAnimated: 方法后立即执行任何清理操作。

    所以didDimiss委托的方法不会被自己调用。

    试试:

    [self.popover dismissPopoverAnimated:YES];
    [self.popover.delegate popoverControllerDidDismissPopover:self.PopUp];
    

    【讨论】:

    • 这里不是这样,他正在初始化新实例以消除旧的弹出框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多