Tim*_*ton 8 uibarbuttonitem ipad ios5 segue
我目前有一个带有UIToolbar的iPad应用程序,其中包含两个UIBarButtonItems,每个UIBarButtonItem都连接到一个popover segue.
当用户触摸任一UIBarButtonItem时,将创建弹出窗口而不是切换.这会创建多个重叠的弹出式窗口.我已经能够使用以下代码关闭以前创建的popover
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// First close the preferences popover if it's open per Apple guidelines
if ([self.popoverA.popoverController isPopoverVisible]) {
[self.popoverA.popoverController dismissPopoverAnimated:YES];
}
if ([self.popoverB.popoverController isPopoverVisible]) {
[self.popoverB.popoverController dismissPopoverAnimated:YES];
}
... code to manage segues ...
}
Run Code Online (Sandbox Code Playgroud)
我还有UIButtons,可以创建正常行为的popover segues.由于与UIBarButtonItems关联的弹出窗口的这种行为,我的应用程序被拒绝.有人有任何UIToolbar的建议或任何代码示例,其中多个UIBarButtonItem正常工作吗?当用户触摸窗外时,弹出窗口会关闭
Bre*_*den 16
这是做你需要做的事情的正确方法:
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if ([identifier isEqualToString:@"SurveyListPopover"]) {
if (self.surveyListPopover == nil) {
return YES;
}
return NO;
}
return YES;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"SurveyListPopover"]) {
// Assign popover instance so we can dismiss it later
self.surveyListPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
}
}
Run Code Online (Sandbox Code Playgroud)
这确保了如果已经显示了弹出窗口的实例,则将取消segue.您只需要确保您的popover对象在storyboard中有一个标识符.
当你收到消息时-prepareForSegue:sender:,取消segue为时已晚.
为了有效地执行此操作,您应该从视图控制器本身而不是条形按钮为您的弹出窗口创建segue,以便它们仍然可以以编程方式执行.现在将UIBarButtonItems连接到一些有条件地呈现或解除弹出窗口的方法.
- (IBAction)showPopoverA
{
if (self.popoverA.popoverController.popoverVisible)
[self.popoverA.popoverController dismissPopoverAnimated:YES];
[self performSegueWithIdentifier:@"ShowPopoverA"];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5066 次 |
| 最近记录: |