UIActionSheet长列表行为在4.2中改变了吗?

时间:2010-12-19 17:28:08

标签: iphone uiactionsheet

我看到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);
}

1 个答案:

答案 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中可以正常使用。