Кнопка "Обнаружение" при нажатии нескольких видов просмотра
У меня есть несколько видов просмотра в одном представлении, и я использую этот код, чтобы определить, какая кнопка была нажата:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if ([title isEqualToString:@"OK"]) {
//for one alert view
[passCode becomeFirstResponder];
} else if ([title isEqualToString:@" OK "]) {
//for another alert view, had to change "OK" to " OK "
[passCodeConfirm becomeFirstResponder];
}
}
Теперь, когда в одном представлении есть несколько видов предупреждений, которые делают разные вещи, я должен обмануть пользователя, думая, что "ОК" и "ОК" - одно и то же. Он работает и выглядит отлично, но он чувствует себя довольно грязно. Разумеется, есть и другой способ сделать это, например, сделать это конкретным для просмотра предупреждений, а затем сделать его конкретным для другого. Вы знаете, как я это сделаю? Спасибо!
Ответы
Ответ 1
Было бы более техническим, а лучше установить уникальный тег для отдельного UIAlertView и идентифицировать его и получить доступ к его методу делегирования.
Например,
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Message" message:@"Are You Sure you want to Update?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok",nil];
[alert setTag:1];
[alert show];
[alert release];
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(alertView.tag == 1)
{
// set your logic
}
}
Ответ 2
Используйте свойство тега, чтобы однозначно идентифицировать каждое из созданных alertview u.
Подобно этому
myAlertView.tag = 1
Затем в методе делегата clickedButtonAtIndex проверьте, какая кнопка alertview была нажата, используя это свойство тега,
if(alertView.tag==1)
Ответ 3
Я бы не использовал названия, чтобы различать кнопки. У вас возникнут проблемы, когда ваше приложение будет локализовано или вы решите изменить названия кнопок, но забудьте обновить их повсюду. Вместо этого используйте индексы кнопок или если у вас есть только одна кнопка в дополнение к кнопке отмены, используйте свойство cancelButtonIndex
UIAlertView
.
Чтобы различать несколько видов предупреждений, вы можете использовать их свойство tag
.
Ответ 4
В вашем представлении добавьте свойство для каждого вида предупреждения.
UIAlertView *myAlertType1;
UIAlertView *myAlertType2;
@property (nonatomic, retain) UIAlertView *myAlertType1;
@property (nonatomic, retain) UIAlertView *myAlertType2;
Создайте свое оповещение, используя эти свойства
self.myAlertType1 = [[[UIAlertView alloc] initWithTitle: ... etc] autorelease];
[self.myAlertType1 show];
Затем в вашем методе делегата:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (alertView == myAlertType1) {
// check the button types and add behaviour for this type of alert
} else if (alertView == myAlertType2 {
// check the button types and add behaviour for the second type of alert
}
}
Изменить: Несмотря на то, что вышеописанное работает, предложение iApple об использовании тега кажется более простым/простым.
Ответ 5
//in your .h file
UIAlertView* alert1;
UIAlertView* alert2;
//in your .m file
// when you are showing your alerts, use
[alert1 show]; //or
[alert2 show];
//and just check your alertview in the below method
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(alertView == alert1)
{
//check its buttons
}
else //check other alert btns
}