У меня есть приложение для 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.
}
}];
}
Вы хотите отобразить сообщение об ошибке от popovercontroller. Почему бы вам просто не показать «UIAlertView» из класса контроллера popover, если логин не удался? – DerWOK
@ DerWOK: Я не знаю, почему я об этом не думал; идеально! Повторите свой комментарий в качестве ответа. И большое спасибо! SD – SpokaneDude
Пожалуйста, приветствуйте. Скопированный ответ. – DerWOK