изменить положение кнопки отмены в UIAlertView? - PullRequest
12 голосов
/ 16 декабря 2010

Я заметил, что когда я удаляю приложение с домашнего экрана iPhone, на экране предупреждения появляется кнопка «Удалить» слева и «Отмена» справа. Тем не менее, когда я создаю функцию удаления в своем приложении с помощью UIAlertView, кнопки, кажется, отображаются только с Cancel слева и Delete справа.

Я бы хотел, чтобы мое приложение соответствовало ОС, но я не могу понять, как сделать, чтобы кнопка «Отмена» появлялась первой. Кто-нибудь знает?

UIAlertView *alert = [[UIAlertView alloc] 
                      initWithTitle:@"Delete Song" 
                      message:@"Are you sure you want to delete this song? This will permanently remove it from your database." 
                      delegate:self 
                      cancelButtonTitle:@"Cancel" 
                      otherButtonTitles:@"Delete", nil];

Я пытался установить alert.cancelButtonIndex = 1, но это не имело никакого эффекта.

Ответы [ 2 ]

52 голосов
/ 16 декабря 2010

Ах, я только что понял, как это изменить. Аргумент cancelButtonTitle является необязательным, поэтому вы можете добавить пользовательскую кнопку в любую позицию, которую хотите, а затем назначить ее как кнопку отмены, например:

UIAlertView *alert = [[UIAlertView alloc] 
                      initWithTitle:@"Delete Song" 
                      message:@"Are you sure you want to delete this song? This will permanently remove it from your database." 
                      delegate:self 
                      cancelButtonTitle:nil
                      otherButtonTitles:@"Delete", @"Cancel", nil];
alert.cancelButtonIndex = 1;

Это ставит кнопку Удалить влево и кнопку Отмена справа и подсвечивает кнопку Отмена.

4 голосов
/ 16 декабря 2010

Возможная причина, по которой Apple использовала представление предупреждений на домашнем экране, заключалась в том, что однажды она попросила пользователей оценить приложения, которые они удаляли (больше не). Вероятно, они сделали кнопку Отмена более светлой, потому что это считалось разрушительным действием (удаляет приложение и его данные).

Полагаю, вы могли бы поменять названия (cancelButtonTitle:@"Delete" otherButtonTitles:@"Cancel", nil) и обрабатывать нажатия на эти кнопки наоборот (не уверен, что Apple сделала то же самое). Это было бы немного неловко, хотя; как насчет использования листа действий вместо этого?

...