多个UIActionSheets一次打开

时间:2010-12-25 12:23:37

标签: objective-c ipad iteration uiactionsheet

我对iPad上的UIActionSheet有疑问。

当我从presentFromBarButtonItem:animated:出示一个活动表并在此之后出现另一个活动表时(通过点击同一个UIToolbar上的另一个UIBarButtonItem),原始的UIActionSheet保持打开状态。

看起来不太好。

我尝试迭代self.view.subviews并将视图转换为UIActionSheet并调用其相应的dismissWithClickedButtonIndex:animated:方法,但它不起作用。

例如:

- (void)pressBarButtonItem {
    for (UIView *view in self.view.subviews) {
        [(UIActionSheet *)view dismissWithClickedButtonIndex:-1 animated:YES];
    }
}

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:4)

我认为您的意思是showFromBarButtonItem:animated:而不是presentFromBarButtonItem:animated:

当您点击其他工具栏项时,操作表不会自动在iPad上消失,因为工具栏已添加到操作表的直通视图列表中。

保留对属性中的操作表的引用。调用showFromBarButtonItem后,使用self.itemFooActionSheet = actionSheet;将其保存在属性中。

在显示另一个项目的另一个操作表之前,请在itemFooActionSheet上调用dismissWithClickedButtonIndex。在解除它之后,您可能还想释放itemFooActionSheet并将其设置为nil,以便它不会在内存中徘徊。

此外,代码可能会在已经显示的情况下再次显示项目Foo的操作表。在显示项目Foo的操作表的方法中,首先检查self.itemFooActionSheet是否为nil,如果是,则只显示它而不重新创建它,或者解除+销毁当前的操作表并构建一个新的(旧的可能)包含过时的信息。)

答案 1 :(得分:0)

在UIBarButtonItems上,如果您不希望人们点击它,您始终可以将启用的属性设置为NO,例如:

self.navigationItem.rightBarButtonItem.enabled = NO;

...然后当用户按下按钮(或在actionSheet之外的某个位置)时再次将其设置为YES。