iPad的UIActionSheet多次展示

Fra*_*esc 10 uibarbuttonitem uiactionsheet ipad

我有一个名为-showMoreTools的方法:它是:

- (IBAction) showMoreTools:(id)sender {
    UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Close" otherButtonTitles:@"Add Bookmark", @"Add to Home Screen", @"Print", @"Share", nil];
    popupQuery.actionSheetStyle = UIActionSheetStyleDefault;
    popupQuery.dismiss
    [popupQuery showFromBarButtonItem:moreTools animated:YES];
    [popupQuery release];
}
Run Code Online (Sandbox Code Playgroud) 当用户点击UIBarButtonItem它时会显示该信息UIActionSheet,但是,如果用户想要关闭而UIActionSheet没有点击关闭按钮,(点击UIBarButtonItem,则显示UIActionSheet在第一个上方UIActionSheet.

有可能以某种方式实现另一个时间UIBarButtonItem来关闭UIActionSheet

非常感谢你 - 我是iOS编程的新手!

chr*_*ton 33

若要在单击按钮两次时将其关闭,则需要跟踪当前显示的ActionSheet.我们在iPad应用程序中执行此操作,效果很好.

在您的具有showMoreTools的类中,在标头中放置:

@interface YourClassHere : NSObject <UIActionSheetDelegate> {
      UIActionSheet* actionSheet_;  // add this line
}
Run Code Online (Sandbox Code Playgroud)

在类文件中,将其更改为:

-(IBAction) showMoreTools:(id)sender {
    // currently displaying actionsheet?
    if (actionSheet_) {
        [actionSheet_ dismissWithClickedButtonIndex:-1 animated:YES];
        actionSheet_ = nil;
        return;
    }

    actionSheet_ = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"Close" otherButtonTitles:@"Add Bookmark", @"Add to Home Screen", @"Print", @"Share", nil];
    actionSheet_.actionSheetStyle = UIActionSheetStyleDefault;
    [popupQuery showFromBarButtonItem:moreTools animated:YES];
    [actionSheet_ release];  // yes, release it. we don't retain it and don't need to
}


- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    // just set to nil
    actionSheet_ = nil;
}
Run Code Online (Sandbox Code Playgroud)