iOS - 使用 StoryBoard 创建弹出视图
Posted
技术标签:
【中文标题】iOS - 使用 StoryBoard 创建弹出视图【英文标题】:iOS - Create an Popover View using StoryBoard 【发布时间】:2011-11-22 10:51:48 【问题描述】:您好,现在我正在尝试使用 Xcode 创建一个 Pop-OverView 故事板。首先,我有
rootViewController, UIViewController, and UITableViewController
我希望 UIView 充当翻页,UITableView 将在 navigationBar 项目控制器下显示 popOver。
对于 UITableView,我想在 NavigationBar 控制器下制作一个 Pop-Over。问题是,当我触摸 Navigation 项以显示 UITableViewController 时,它显示正确,但是当我尝试关闭 Pop-Over View 时,它不会关闭。然后,导航项不能正常工作。当我多次触摸它时,它会显示多个 popOverView 实例。
这对我来说似乎没有意义。谁能帮助我或告诉我在哪里可以找到这方面的文档/教程?
更新:
对于 UIPopOverController,它现在似乎运行良好,但是当我多次触摸导航项时它仍然困扰着我。它将显示多个 PopOver 实例。我该如何处理它,所以它只会显示一个实例?
【问题讨论】:
【参考方案1】:我遇到了同样的问题,大部分都找到了解决方案here。基本上,每次按下按钮以显示或关闭弹出框时,您都会更改按钮的操作。这是我最终得到的代码:
@interface FilterTableViewController : UITableViewController
UIPopoverController *editPopover;
id saveEditSender;
id saveEditTarget;
SEL saveEditAction;
-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender
if([[segue identifier] isEqualToString:@"EditFilterSegue"])
// Save the edit button's info so we can restore it
saveEditAction = [sender action];
saveEditTarget = [sender target];
saveEditSender = sender;
// Change the edit button's target to us, and its action to dismiss the popover
[sender setAction:@selector(dismissPopover:)];
[sender setTarget:self];
// Save the popover controller and set ourselves as the its delegate so we can
// restore the button action when this popover is dismissed (this happens when the popover
// is dismissed by tapping outside the view, not by tapping the edit button again)
editPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
editPopover.delegate = (id <UIPopoverControllerDelegate>)self;
-(void)dismissPopover:(id)sender
// Restore the buttons actions before we dismiss the popover
[saveEditSender setAction:saveEditAction];
[saveEditSender setTarget:saveEditTarget];
[editPopover dismissPopoverAnimated:YES];
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
// A tap occurred outside of the popover.
// Restore the button actions before its dismissed.
[saveEditSender setAction:saveEditAction];
[saveEditSender setTarget:saveEditTarget];
return YES;
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
// Before we navigate away from this view (the back button was pressed)
// remove the edit popover (if it exists).
[self dismissPopover:saveEditSender];
【讨论】:
我认为这种解决方法过于复杂,但这主要是个人喜好问题。 This answer 有我首选的解决方法,在同一问题的其他答案中还有更多。 @rickster 我同意,这看起来简单多了,我下次试试。以上是关于iOS - 使用 StoryBoard 创建弹出视图的主要内容,如果未能解决你的问题,请参考以下文章