UIPopOverController + UITableView - 选择单元格时隐藏弹出窗口

Sat*_*yam 10 uitableview uipopovercontroller ios

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

Sat*_*yam 9

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

@property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue;
Run Code Online (Sandbox Code Playgroud)

在实现文件中:

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

        [[segue destinationViewController] setDelegate:self];
    }
}
Run Code Online (Sandbox Code Playgroud)

什么时候你想隐藏弹出:

    if ([self.popSegue.popoverController isPopoverVisible]) 
    {
        [self.popSegue.popoverController dismissPopoverAnimated:YES];        
    }
Run Code Online (Sandbox Code Playgroud)

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


Gio*_*esi 9

请允许我建议一个略有不同的解决方案,其中包括传递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]];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

@property (weak, nonatomic) UIPopoverController* popoverController;
Run Code Online (Sandbox Code Playgroud)

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

@synthesize popoverController;
Run Code Online (Sandbox Code Playgroud)

同样的文件,无论何时你想解雇popover:

[popoverController dismissPopoverAnimated:YES];
Run Code Online (Sandbox Code Playgroud)