2013-12-08 4 views
0

У меня есть приложение для iPad (XCode5, ARC, iOS6 и раскадровки). В одном контроллере представления у меня есть popover, который позволяет пользователю либо войти в систему, либо зарегистрироваться.Как отобразить ошибку в UIPopover, сгенерированную в другом классе?

Нажатие кнопки «Логин» или «Регистрация» приводит к тому, что обработка входа/регистрации происходит в другом классе. Если есть ошибка, процедуры входа/регистрации возвращают строку, описывающую ошибку для метода вызова. Все это, пока popover все еще отображается (если ошибок не было, то оно отклоняется).

Мой вопрос: как мне отобразить ошибку в popover, которая находится в другом классе? (Я просто хочу, чтобы отобразить строку ошибки в пироге в нижней части)

Вот код для отображения поповера (некоторые из них были удалены для краткости) в SettingsViewController.m:

// add Register button 
UIButton *bRegister = [[UIButton alloc]initWithFrame:CGRectMake(55,200,140,30)]; // add error msg: CGRectMake(55,250,140,30) 
[bRegister setTitle:NSLocalizedString(@"Register",nil) forState:UIControlStateNormal]; 
[bRegister setTitleColor: [UIColor blueColor] forState:UIControlStateNormal]; 
bRegister.layer.borderWidth=1.0f; 
bRegister.layer.borderColor=[[UIColor blueColor] CGColor]; 
CALayer *btnRegister = [bRegister layer]; 
[btnRegister setMasksToBounds:YES]; 
[btnRegister setCornerRadius:5.0f]; 
[popoverView addSubview:bRegister]; 

// connect the buttons to their methods 
[bLogin addTarget:self action:@selector(loginButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 
[bRegister addTarget:self action:@selector(registerButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 

// if previous popoverController is still visible... dismiss it 
if ([popoverController isPopoverVisible]) { 
    [popoverController dismissPopoverAnimated:YES]; 
} 

//create a popover controller 
popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 
[popoverController presentPopoverFromRect:((UIButton *)oParseRegister).frame inView:self.view 
       permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES]; 


// handle login button tap 
- (void) loginButtonClicked { 
ParseDotCom *pdc = [[ParseDotCom alloc]init]; 
NSString *errorReturned = [pdc loginPFUser:tfLoginID.text password:tfLoginPwd.text]; 
} 

Вот код, который делает логин/регистрации (в ParseDotCom.m):

[PFUser logInWithUsernameInBackground: userID password: userPW 
        block:^(PFUser *user, NSError *error) { 
        if(user) { 
          NSLog(@"\n\nuser logged on"); 
          // Hooray! Let them use the app now. 
          } 
          else { 
           NSString *errorString = [error userInfo][@"error"]; 
           NSLog(@"\n\nerror logging on: %@", errorString); 
          // Show the errorString and let the user try again. 
           } 
         }]; 

}

+1

Вы хотите отобразить сообщение об ошибке от popovercontroller. Почему бы вам просто не показать «UIAlertView» из класса контроллера popover, если логин не удался? – DerWOK

+0

@ DerWOK: Я не знаю, почему я об этом не думал; идеально! Повторите свой комментарий в качестве ответа. И большое спасибо! SD – SpokaneDude

+0

Пожалуйста, приветствуйте. Скопированный ответ. – DerWOK

ответ

1

Вы хотите отобразить сообщение об ошибке от контроллера popovercontroller. Почему бы вам просто не показать «UIAlertView» из класса контроллера popover, если логин не удался?

Например, вы можете показать предупреждение окно сообщения, как так:

UIAlertView * alertBox = [[UIAlertView alloc] 
           initWithTitle:@"Error" 
             message:@"Wrong password" 
            delegate:self 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil]; 
[alertBox show];