【问题标题】:UIPopOverController + UITableView - Hide popover when cell is selectedUIPopOverController + UITableView - 选择单元格时隐藏弹出框
【发布时间】:2011-10-28 18:56:00
【问题描述】:

在我的 Popover 控制器中,我有一个表格视图。在选择一个单元格时,我想隐藏弹出窗口。 我怎样才能实现它。

【问题讨论】:

    标签: ios uitableview uipopovercontroller


    【解决方案1】:

    在根视图控制器的头文件中:

    @property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue;
    

    在实现文件中:

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

    当你想隐藏弹出窗口时:

        if ([self.popSegue.popoverController isPopoverVisible]) 
        {
            [self.popSegue.popoverController dismissPopoverAnimated:YES];        
        }
    

    在表格视图中,添加一个委托并在根视图控制器中实现该委托。调用委托方法时,使用上面的代码关闭弹出窗口。

    【讨论】:

    • 很高兴你解决了这个难题。
    【解决方案2】:

    请允许我提出一个稍微不同的解决方案,其中包括传递 popover 控制器引用而不是 segue 引用。

    在源视图控制器的实现文件中:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        if ([[segue destinationViewController] isKindOfClass:[MyDestViewController class]]) {
            MyDestViewController* viewController = (MyDestViewController*)[segue destinationViewController];
            UIStoryboardPopoverSegue* popoverSegue = (UIStoryboardPopoverSegue*)segue;
            [viewController setPopoverController:[popoverSegue popoverController]];
        }
    }
    

    在目标视图控制器的头文件中:

    @property (weak, nonatomic) UIPopoverController* popoverController;
    

    在目标视图控制器的实现文件中:

    @synthesize popoverController;
    

    相同的文件,只要你想关闭弹出框:

    [popoverController dismissPopoverAnimated:YES];
    

    【讨论】:

      【解决方案3】:

      苹果文档推荐以下内容:

      以编程方式关闭弹出框需要指向弹出框控制器的指针。获得这样一个指针的唯一方法是自己存储它,通常在内容视图控制器中。这可确保内容视图控制器能够关闭弹出框以响应适当的用户操作。

      http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/Popovers.html

      【讨论】:

        【解决方案4】:

        在 didSelectRowAtIndexPath 中试试这个代码

        [viewController.popoverController dismissPopoverAnimated:YES];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-24
          • 1970-01-01
          • 2014-12-13
          • 1970-01-01
          • 2015-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多