如何在内容视图中关闭pop over view?

时间:2011-06-30 08:05:23

标签: iphone objective-c ios uipopovercontroller dismiss

看到屏幕截图很清楚,明白我的意思 enter image description here 你可以看到我在我的弹出视图中添加了一个navigationItem

我希望我可以忽略流行视图

但它似乎只在弹出视图下标记了单元格

pop视图将被忽略,我尝试添加此方法

[self.view removeFromSuperview];

它只删除表视图,弹出视图框仍然存在,只有没有内容视图

任何回复都会有所帮助:)

谢谢

韦伯

/ ****** ****** EDIT / 我在项目中使用WEPopoverView

这是我选择表格视图时创建弹出视图的代码

if (indexPath.row==2) {
DaysOfWeek *popView = [[DaysOfWeek alloc]init];
UINavigationController *navPopView = [[UINavigationController alloc] initWithRootViewController:popView];
    if (self.popoverController) {
       [self.popoverController dismissPopoverAnimated:YES];
       self.popoverController = nil;
}
else {
        self.popoverController = [[[WEPopoverController alloc] initWithContentViewController:navPopView] autorelease];
        CGRect frame = [tableView cellForRowAtIndexPath:indexPath].frame;
        [self.popoverController presentPopoverFromRect:frame 
                                                    inView:self.view            permittedArrowDirections:UIPopoverArrowDirectionDown|UIPopoverArrowDirectionUp
                                  animated:YES];
                        }
                    }

/ ****** ****** EDIT2 / 我在创建弹出视图时尝试添加完成按钮 这是代码,但它只显示导航,没有完成按钮

DaysOfWeek *popView = [[DaysOfWeek alloc]init];
UINavigationController *navPopView = [[UINavigationController alloc] initWithRootViewController:popView];
navPopView.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(hidePopView)];

3 个答案:

答案 0 :(得分:1)

在添加弹出视图时,将标签设置为该popupView,然后将其添加为子视图,

然后使用:

for (UIView *tempView in [self.view subviews]) {
    if ([tempView tag]==urTag) {
        [tempView removeFromSuperview];
    }
}

这将检索所有子视图,然后仅删除您的弹出视图

答案 1 :(得分:0)

我认为只需发布您的self.popoverController就可以正确解决问题,包括所有超级视图。

您还可以查看dealloc中的WEPopoverController方法,了解哪些观点涉及并需要删除:

    [self dismissPopoverAnimated:NO];
    [contentViewController release];
    [containerViewProperties release];
    [passthroughViews release];

无论如何,我看到的唯一优势是可以使用dismissPopoverAnimated来调用YES

希望这有帮助。

编辑:

如何将完成按钮连接到控制器?

通过DaysOfWeek的只读属性访问您的按钮;然后在你的控制器中,当你创建DaysOfWeek时,执行:

 DaysOfWeek *popView = [[DaysOfWeek alloc]init];
 [propView.doneButton addTarget:self action:@selector(fullyDismissPopover) forControlEvents:UIControlEventTouchUpInside];

在fullyDismissPopover中,你调用release或调用上面突出显示的函数序列(但我认为释放会更好)。

答案 2 :(得分:0)

 DaysOfWeek *popView = [[DaysOfWeek alloc]init];
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeContactAdd];
[doneButton addTarget:self action:@selector(hidePopView) forControlEvents:UIControlEventTouchUpInside];
popView.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:doneButton] autorelease];
UINavigationController *navPopView = [[UINavigationController alloc] initWithRootViewController:popView];

这也可以解决问题!