1

我正在WEPPopoverController我的 iPhone 应用程序中展示一个。在那个 WEPPopoverController 中,我添加了一个UITableViewController. 我正在使用此弹出框进行搜索。

现在,当我打开此 Popover 时,屏幕如下所示:

在此处输入图像描述

现在,我想关闭从UITableViewController's didSelectRowAtIndexPath,

这该怎么做?

代码:

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

提前致谢!!!

4

2 回答 2

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;         
}

就是这样。你完成了。

于 2012-07-04T11:58:02.550 回答
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];
于 2012-07-04T11:36:25.910 回答