UIActionSheet 长列表行为在 4.2 中改变了吗?
Posted
技术标签:
【中文标题】UIActionSheet 长列表行为在 4.2 中改变了吗?【英文标题】:UIActionSheet long list behavior changed in 4.2? 【发布时间】:2010-12-19 17:28:07 【问题描述】:我看到 ios 4.2 中带有 UIActionSheet 的行为发生了一些变化。我在 Apple 的开发者文档或论坛中找不到任何相关内容,因此我不确定如何解决。
在我的列表应用程序中,我向用户展示了一个操作表,她可以从中选择她想要在启动时加载的列表。显然,这意味着会有可变数量的项目,并且控件可以很好地处理它。直到大约 7 个项目,它将所有项目显示为按钮。一旦超过该阈值,它就会将项目放入滚动视图中以供选择。在 4.2 之前,它在该滚动列表中包含“取消”按钮。在 4.2 中,它现在似乎正在分离 Cancel 控件,将其保留为按钮,同时将其余项目放入滚动视图。问题是它似乎将取消项目保留在按钮索引列表中,因此当我检查 clickedButtonAtIndex: 或 didDismissWithButtonIndex: 中的 buttonTitleAtIndex:buttonIndex 时,第一个项目返回“取消”,然后其他项目标题是off by 1。单击“取消”按钮也会返回“取消”。
其他人遇到过这种情况并有如何处理它的建议吗?同样,这在 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);
【问题讨论】:
我忘了说,当其他ButtonTitles 被提供时似乎很好。所以它必须与 addButtonWithTitle: 的工作原理有关。 【参考方案1】:尝试在末尾动态添加取消按钮,而不是最初设置它:
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 中可以正常工作。
【讨论】:
谢谢,成功了!我猜现在 4.2 想要动态添加按钮全有或全无?以上是关于UIActionSheet 长列表行为在 4.2 中改变了吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 ios 中创建像 UiActionSheet 这样的自定义 uiView