我正在实施一份行动表。当我按“确定”按钮时,执行这些操作,按“取消”返回。 “确定”按钮工作正常,但是当我按下“取消”按钮时,没有任何反应,它不会缩回或执行任何操作,只需在操作表视图中挂起即可。
以下是我的代码:
要在导航栏上创建按钮:
UIBarButtonItem *clearButton = [[[UIBarButtonItem alloc] initWithTitle:@"Clear History"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(ClearHistoryAction:)] autorelease];
self.navigationItem.leftBarButtonItem = clearButton;
点击并启动操作表时:
- (IBAction)ClearHistoryAction:(id)sender
{
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"Clear History?"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"OK"
otherButtonTitles:nil];
// use the same style as the nav bar
actionSheet.actionSheetStyle = self.navigationController.navigationBar.barStyle;
[actionSheet showInView:self.view];
[actionSheet release];
}
如果选择确定,请执行以下操作:
- (void)actionSheet:(UIActionSheet *)actionSheet
didDismissWithButtonIndex:(NSInteger) buttonIndex
{
if (!buttonIndex == [actionSheet cancelButtonIndex])
{
//do what i want here!
}
}
在标头文件中,UIActionSheetDelegate
中包含@interface
。
答案 0 :(得分:1)
迟到了,可能的解释可能是:
似乎是tabbar的问题。如果你打电话给UIActionSheet的
[sheet showInView:self.view]
来自视图控制器,它是UITabViewController的子视图 取消按钮上的命中测试在该部分中失败 位于标签栏视图上方的UIActionSheet。
如果您改为传入UITabBarController的视图,那么UIActionSheet将按预期运行。
[sheet showInView:self.parentViewController.tabBarController.view];
答案 1 :(得分:0)
我不知道它是否能解决这个问题,但你想做buttonIndex != [actionSheet cancelButtonIndex]
(检查不等于)而不是!buttonIndex == [actionSheet cancelButtonIndex]
(反转buttonIndex
(!)并检查是否相等)。
答案 2 :(得分:0)
您需要使用showFromBarButtonItem而不是showInView。问题是取消按钮被另一个视图覆盖 - 可能是工具栏或标签栏 - 所以它没有得到你认为它应该得到的触摸事件。有时也应该使用showFromTabBar和showFromToolbar(参见UIActionSheet类引用)。