Изменить положение кнопки отмены в UIAlertView?

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

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

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 ответа

Решение

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

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

Ах, я только что понял, как это изменить. Аргумент 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;

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

Другие вопросы по тегам