Поведение длинного списка UIActionSheet изменилось в 4.2? - PullRequest
4 голосов
/ 19 декабря 2010

Я вижу некоторые изменения поведения в iOS 4.2 с UIActionSheet. Я не могу найти что-либо об этом в документации для разработчиков на Apple или на форумах, поэтому не знаю, как решить эту проблему.

В моем приложении со списком я предоставляю пользователю лист действий, из которого он может выбрать список, который хочет загрузить при запуске. Очевидно, это означает, что будет переменное количество элементов, и элемент управления прекрасно с этим справится. Примерно до 7 пунктов, он показывает все элементы в виде кнопок. Как только он пересекает этот порог, он помещает элементы в представление прокрутки для выбора. До 4.2 он включал кнопку «Отмена» в этом списке прокрутки. В 4.2 теперь кажется, что он отделяет элемент управления «Отмена», оставляя его в качестве кнопки, а остальные элементы помещаются в представление прокрутки. Проблема в том, что кажется, что он сохраняет элемент Cancel в списке индексов кнопок, так что, когда я проверяю buttonTitleAtIndex: buttonIndex в clickedButtonAtIndex: или didDismissWithButtonIndex :, первый элемент возвращает «Cancel», затем остальные заголовки элементов 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);
}

1 Ответ

3 голосов
/ 20 декабря 2010

Попробуйте добавить кнопку отмены динамически в конце, а не настраивать ее изначально:

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 по крайней мере для нас.

...