2012-05-11 1 views
0

Я новичок в iOS.Как отменить alertview при нажатии на кнопку в этом предупреждении

Я работаю над предупреждением. Вот мой код. Здесь есть 2 предупреждения: successfulallert и unsuccessfulallert для страницы входа. Я также использую делегат alertview здесь, он будет работать как для брандмауэров, но я хочу работать только для успешного предупреждения, а навигация должна выполняться только для успешного предупреждения. Если кто-нибудь это знает, пожалуйста, помогите мне.

NSString *responseOfResult = [[NSString alloc]initWithString:[result response]]; 
    NSRange match; 
    // NSLog(@"string= %@", str); 
    match = [responseOfResult rangeOfString: @"successful"]; 
    if(match.location == NSNotFound) 
    { 
     UIAlertView *unsuccessfulAllert = [[UIAlertView alloc] 
           initWithTitle:@"Alert" 
           message:responseOfResult 
           delegate:self 
           cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
     [unsuccessfulAllert show]; 

    } 
    else { 
     UIAlertView *successfulAllert = [[UIAlertView alloc] 
           initWithTitle:@"Message" message:@"Login successful." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
     [successfulAllert show]; 
    } 
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if(buttonIndex == 0){ 
     [[self navigationController]pushViewController:registerUserScreen animated:YES]; 
    } 
} 

ответ

0
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if(buttonIndex == 0){ 
     //POP here with this: 
     [self.navigationController pushViewController:addItemView animated:NO]; 

    } 
} 
0

Добавить тег к двум видам предупреждений и проверить тег в встревоженном виде делегата.

код

Пример:

NSString *responseOfResult = [[NSString alloc]initWithString:[result response]]; 
NSRange match; 
// NSLog(@"string= %@", str); 
match = [responseOfResult rangeOfString: @"successful"]; 
if(match.location == NSNotFound) 
{ 
    UIAlertView *unsuccessfulAllert = [[UIAlertView alloc] 
          initWithTitle:@"Alert" 
          message:responseOfResult 
          delegate:self 
          cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
    [unsuccessfulAllert setTag:1]; 
    [unsuccessfulAllert show]; 

} 
else { 
    UIAlertView *successfulAllert = [[UIAlertView alloc] 
          initWithTitle:@"Message" message:@"Login successful." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
    [successfulAllert setTag:2]; 
    [successfulAllert show]; 
} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
if(alertView.tag==2 && buttonIndex == 0){ 
    [[self navigationController]pushViewController:registerUserScreen animated:YES]; 
} 
+0

вы потеряете '.tag' во втором выражении' if'. – Mat

+0

Вы были правы Матем. Я исправил ошибку сейчас. –

0

Да делегат будет работать для обоих alertviews, но вы можете присвоить метку каждому alertview объекта и проверьте метки в делегатом, а затем, если выполнить событие тег для этого конкретные соответствия AlertView onject. Если вам нужен код, я предоставил.

0
NSString *responseOfResult = [[NSString alloc]initWithString:[result response]]; 
NSRange match; 
// NSLog(@"string= %@", str); 
match = [responseOfResult rangeOfString: @"successful"]; 
if(match.location == NSNotFound) 
{ 
    UIAlertView *unsuccessfulAllert = [[UIAlertView alloc] 
          initWithTitle:@"Alert" 
          message:responseOfResult 
          delegate:self 
          cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 

    [unsuccessfulAllert setTag:1]; 

    [unsuccessfulAllert show]; 

} 
else { 
    UIAlertView *successfulAllert = [[UIAlertView alloc] 
          initWithTitle:@"Message" message:@"Login successful." delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 

    [successfulAllert setTag:2]; 
    [successfulAllert show]; 
} 
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
if(alertView.tag == 2) 
{ 
    [[self navigationController]pushViewController:registerUserScreen animated:YES]; 
} 
else 
{ 
    //[[self navigationController]pushViewController:registerUserScreen animated:NO]; 
    // OR 
    return; 
} 
} 
0

У вас есть много способов, чтобы исправить свой код, то первый и очень распространенным является использование свойства tag (целое число) в UIView. Поскольку UIAlertview наследуется от UIView, он имеет tag свойство, поэтому каждый раз, когда вы хотите создать оповещение (или вид), установите метку и проверить состояние как:

... 
alert.tag=1; 
[alert show]; 

затем, чтобы узнать, которым оповещения звонит обратный вызов:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if(alertView.tag==theTagOfYourAlert){ 
    //do your stuff 
    } 
} 

другой путь, в вашем случае, может быть:

if([alertView.title isEqualToString:@"Alert"]){ 
     //do your stuff 
    } 
} 
1

Почему не вы поставить «ОК» как cancelButtonTitle? Все будет обработано автоматически.

UIAlertView *successfulAllert = [[UIAlertView alloc] 
           initWithTitle:@"Message" message:@"Login successful." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
     [successfulAllert show]; 
0

Для таких вещей, как «Статус входа в систему», вы можете автоматически удалить сообщение «Успешно». Попробуйте вместо этого:

https://github.com/camclendenin/flashbox

Это прекрасно работает и очень удобно для таких ситуаций. Кроме того, вам не нужно иметь дело со всем беспорядком, связанным с UIAlertViews.