2012-02-08 5 views
2

У меня есть UIAlertView с текстовым полем на нем и двумя кнопками: Save & Отмена. Когда нажата кнопка «Сохранить», я проверяю, не является ли текстовое поле пустым, и если это просто, я просто хочу изменить заполнитель textFields: @ «введите имя пожалуйста» и ЗАПРЕЩАЕТ вид предупреждения на экране. Однако он автоматически отклоняется.Показать UIAlertView

Как это сделать?

+1

Проверить этот ответ здесь лучший способ справиться с вашей ситуацией: http://stackoverflow.com/questions/1947783/prevent-uialertview-from-dismissing – jonkroll

+0

Кажется, вы должны создать подкласс, чтобы переопределить значение по умолчанию отклонить поведение, см .: [http://stackoverflow.com/questions/2051402/is-it-possible-to-not-dismiss-a-uialertview](http://stackoverflow.com/questions/2051402/is-it -possible-to-not-reject-a-uialertview) – GregularExpressions

+0

Спасибо, ребята, но, как я уже писал ниже, Брендану, я решил сделать свое собственное предупреждение. Спасибо, что нашли время и комментировали :) –

ответ

6

Добавить цель в текстовое поле в подклассе alertView. Вы можете подкласс alertView и не распускать as described in this post

[[alertView textFieldAtIndex:0] addTarget:self action:@selector(textFieldDidChange) forControlEvents:UIControlEventEditingChanged]; 

Затем написать функцию, называемую textFieldDidChange, которая проверяет текущее текстовое поле вашего alertView и установить логическое значение, так что вы знаете или не закрыть предупреждение.

- (void) textFieldDidChange 
{ 
    NSString *alertViewText = [[alertView textFieldAtIndex:0] text]; 

    if ([alertViewText isEqualToString:@""]) { 
    [alertView setMessage:@"Enter a name please."]; 
    } else { 
    [alertView setMessage:@"Default Message"]; 
    } 
} 

* Кроме того, я хотел бы предложить отключить «Сохранить», когда она пуста и не должен подкласс. *

- (void) textFieldDidChange 
{ 
    NSString *alertViewText = [[alertView textFieldAtIndex:0] text]; 

    if ([alertViewText isEqualToString:@""]) { 
    [alertView setMessage:@"Enter a name please."]; 
    for (UIViewController *view in alertView.subview) { 
     if ([view isKindOfClass:[UIButton class]]) { 
      UIButton *button = (UIButton *)view; 
      if ([[[button titleLabel] text] isEqualToString:@"Save"]) 
      [button setEnabled:NO]; 
     }  
    } 
    } else { 
    [alertView setMessage:@"Default Message"]; 
    for (UIViewController *view in alertView.subview) { 
     if ([view isKindOfClass:[UIButton class]]) { 
      UIButton *button = (UIButton *)view; 
      if ([[[button titleLabel] text] isEqualToString:@"Save"]) 
      [button setEnabled:YES]; 
     }  
    } 
    } 
} 
+0

Whoa, спасибо за ответ Брендан. Я думал, это будет намного проще. Итак, я решил сделать собственный AlertView с нуля. Еще раз спасибо! :) –

+0

У меня в настоящее время есть альтернативный подход, реализованный в приложении, которое не так сложно и дает вам много энергии. Например, вы можете отключить кнопку «Сохранить», когда пользователь ввел ЛЮБОЕ НЕВОЗМОЖНОЕ имя. Это может включать пустую строку, имя, которое уже используется, или запрещенное имя (например, вульгарное слово или ключевое слово). Это также делает так, что alertView: willDismissWithButtonIndex не должен делать никаких проверок ошибок, так как пользователь может нажать «Отменить» для недопустимого имени. – brendan

+0

Да, я понял, что я начал внедрять сделанные на заказ уведомления в своем приложении, и я решил, что мне нужно также перепроектировать AlerViews. И это будет больше работы и сложнее для меня, а затем для изменения собственных оповещений. –