从子视图中删除WEPPopover

时间:2012-07-04 11:22:21

标签: iphone objective-c ios xcode

我在iPhone应用程序中展示了WEPPopoverController。在那个WEPPopoverController中,我添加了一个UITableViewController。这个popover我用于搜索目的。

现在当我打开这个Popover时,屏幕看起来像这样:

enter image description here

现在,我想从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];

提前致谢!!!

2 个答案:

答案 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];