我看到iOS 4.2中使用UIActionSheet的一些更改行为。我在Apple的开发者文档或论坛中找不到任何关于它的内容,所以我不确定如何解决它。
在我的列表应用程序中,我向用户显示一个操作表,从中可以选择要在启动时加载的列表。显然,这意味着将有可变数量的项目,并且控件处理它很好。直到大约7项,它显示所有项目作为按钮。一旦超过该阈值,它就会将项目放入滚动视图中进行选择。直到4.2,它包括该滚动列表中的取消按钮。在4.2中,它现在似乎是将Cancel控件分开,将其保留为按钮,同时将其余项目放入滚动视图中。问题是它似乎将Cancel项目保留在按钮索引列表中,因此当我在clickedButtonAtIndex:或didDismissWithButtonIndex:中检查buttonTitleAtIndex:buttonIndex时,第一个项目返回“Cancel”,然后其他项目标题为单击取消按钮也会返回“取消”。
其他人都有过这方面的建议,并建议如何处理它?再次,这在3.0,3.1,4.0和4.1中运行良好。
这是我正在使用的相关代码:
- (IBAction)popupDefaultListActionSheet {
UIActionSheet *popup = [[UIActionSheet alloc]
initWithTitle:nil
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:nil];
for (List *l in allActiveLists) { // allActiveLists defined elsewhere
[popup addButtonWithTitle:[l label]];
}
popup.actionSheetStyle = UIActionSheetStyleBlackOpaque;
popup.tag = 23;
[popup becomeFirstResponder];
[popup showInView:[self.view.window.subviews objectAtIndex:0]];
[popup release];
}
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
DLOG(@"AppSettingsVC.actionSheet didDismissWithButtonIndex: %d", buttonIndex);
NSString *defaultListName = [actionSheet buttonTitleAtIndex:buttonIndex];
DLOG(@"chosen default list was: %@", defaultListName);
}
答案 0 :(得分:3)
尝试在最后动态添加取消按钮,而不是最初设置:
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"My Action Sheet"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
for (I32 i = 0; i < itemCount; i++) {
[actionSheet addButtonWithTitle:itemText];
}
[actionSheet addButtonWithTitle:@"Cancel"];
[actionSheet setCancelButtonIndex:itemCount];
似乎至少在iOS 4.2中可以正常使用。