Я обнаружил странную проблему при использовании UIActionSheet на iPhone (iOS 4.2). Рассмотрим этот код:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"TestSheet"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles: nil];
[actionSheet addButtonWithTitle:@"one"];
[actionSheet addButtonWithTitle:@"two"];
[actionSheet addButtonWithTitle:@"three"];
[actionSheet addButtonWithTitle:@"four"];
[actionSheet addButtonWithTitle:@"five"];
[actionSheet addButtonWithTitle:@"six"];
//uncomment next line to see the problem in action
//[actionSheet addButtonWithTitle:@"seven"];
[actionSheet showInView:window];
[actionSheet release];
return YES;
}
- (void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"buttonIndex: %d, cancelButtonIndex: %d, firstOtherButtonIndex: %d",
buttonIndex,
actionSheet.cancelButtonIndex,
actionSheet.firstOtherButtonIndex);
}
Если вы запустите это приложение, рабочий лист ведет себя так, как ожидалось. Это означает, что cancelButtonIndex всегда равен 0, и индексы кнопок сообщаются правильно. 1 для кнопки "один" и т.д. Если вы прокомментируете строку для добавления седьмой кнопки, таблица действий создаст вид таблицы, с кнопкой отмены на дополнительной строке. Если я нажму кнопку "один" в этом случае, переменная buttonindex будет равна 0, но так же будет cancelButtonIndex. Невозможно определить, нажал ли пользователь кнопку "отменить" или "один" . Это не похоже, что так должно быть. Кто-нибудь не согласен? Благодарим за помощь.