iPad的UIActionSheet多次展示

时间:2011-03-27 11:42:27

标签: ipad uibarbuttonitem uiactionsheet

我有一个名为-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];
}
当用户点按UIBarButtonItem时,它会显示UIActionSheet,但是,如果用户想要关闭UIActionSheet而不点按“关闭”按钮,(点按UIBarButtonItem,则它会在第一个UIActionSheet上显示UIActionSheet

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

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

5 个答案:

答案 0 :(得分:33)

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

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

@interface YourClassHere : NSObject <UIActionSheetDelegate> {
      UIActionSheet* actionSheet_;  // add this line
}

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

-(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;
}

答案 1 :(得分:1)

我找到了另一个解决方案。问题是当使用showFromBarButtonItem时,工具栏视图会自动添加到弹出窗口的直通视图列表中。您可以在直接使用UIPopoverController时修改(并清除)直通视图,但不能在UIActionSheet作为showFromRect的一部分显示时修改(并清除)直播视图。

无论如何,通过使用CGRect buttonRect = CGRectIntersection(toolbar.frame, CGRectMake(0, 0, 60, self.frame.size.height)); [popupQuery showFromRect:buttonRect inView:self animated:YES]; ,没有工具栏,popover可以自动添加到其直通视图中。因此,如果您知道按钮栏所在的(近似)矩形,则可以使用以下内容:

{{1}}

在上面的示例中,我的按钮位于工具栏的左侧。

答案 2 :(得分:0)

使用

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

答案 3 :(得分:0)

尝试设置标志(是/否)

-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

答案 4 :(得分:0)

我的方法类似于christophercotton's。

在我的showActionSheet中,我检查动作表是否可见而不是实例化:

- (IBAction)showActionSheet:(id)sender
{
    if ([self.fullActionSheet isVisible]) {
        [self.fullActionSheet dismissWithClickedButtonIndex:-1 animated:NO];
        _fullActionSheet = nil;
        return;
    }

    //actionsheet code
}