我有一个名为-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编程的新手!
答案 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
}