我在iPhone应用程序中展示了WEPPopoverController
。在那个WEPPopoverController中,我添加了一个UITableViewController
。这个popover我用于搜索目的。
现在当我打开这个Popover时,屏幕看起来像这样:
现在,我想从UITableViewController's
didSelectRowAtIndexPath
关闭此Popover,
怎么做?
代码:
self.searchTableViewController = [[SearchTableViewController alloc] initWithStyle:UITableViewStylePlain]; // UITableViewController
self.seachPopoverController = [[[WEPPopoverClass alloc] initWithContentViewController:self.searchTableViewController] autorelease]; // WepPopoverController
self.seachPopoverController.delegate = self;
[self.seachPopoverController presentPopoverFromRect:[searchB frame] inView:topPanelV permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
提前致谢!!!
答案 0 :(得分:6)
在SearchTableViewController中添加1个变量作为父类,如
id parent;
为此创建属性
@property (nonatomic,assign)id parent;
合成它
@synthesize parent;
现在
创建self.searchTableViewController
将其父级指定为
self.searchTableViewController.parent = self;
现在在didSelectRowAtIndex
中[parent dismisMyPopoverMethod];
-(void)dismisMyPopoverMethod
{
[self.seachPopoverController dismissPopoverAnimated:YES];
self.seachPopoverController = nil;
}
就是这样。你完成了。
答案 1 :(得分:1)
这样做:只为一个方法使视图控制器成为表视图控制器的委托 - dismissPopover(对于其他方法,委托必须是表视图控制器)。所以你的表视图控制器将有两个委托。在您的委托(视图控制器)中实现此方法。但是从表视图控制器调用它。更详细的一步一步:
在视图控制器中声明弹出框的属性,在其中显示此弹出框。
@property (strong, nonatomic) UIPopoverController *popoverController;
创建一个新协议(我们将其命名为TableInPopoverDelegate),它具有以下方法:
- (void) dismissPopover;
将此方法添加到视图控制器的实现文件中并添加:
- (void) dismissPopover {
[self.popoverController dismissPopoverAnimated:YES];
}
添加协议的头文件并向表视图控制器添加委托属性:
@property (strong, nonatomic) id <TableInPopoverDelegate> popoverDelegate;
在添加视图控制器之前,使视图控制器成为表视图控制器的委托:
tableViewController.popoverDelegate = self; // Here self is your view controller
当用户选择一行时,在委托上调用dismissPopover。
[popoverDelegate dismissPopover];