#objective-c #cocoa-touch
#objective-c #cocoa-touch
Вопрос:
У меня есть UIViewController, который встроен в навигационный контроллер и представлен модально:
//UIViewController
AuthenticationController *auth = [[AuthenticationController alloc] init];
//UINavigationController
AuthRootController *navController = [[AuthRootController alloc]
initWithRootViewController:auth];
navController.navigationBar.topItem.title = @"Anmelden";
navController.delegate = self;
[self presentModalViewController:navController animated:YES];
RELEASE_SAFELY(navController);
Однако что-то не так с делегатом, который я создал в классе authootcontroller:
@protocol AuthRootControllerDelegate
@required
-(void)authRootControllerDidEnd:(UINavigationController *)sender;
@end
@interface AuthRootController : UINavigationController {
id<AuthRootControllerDelegate> delegate;
}
@property (nonatomic, assign) IBOutlet id delegate;
@end
И реализация:
@implementation AuthRootController
@synthesize delegate;
-(void)userDidCancelController:(UINavigationController *)sender{
if (self.delegate amp;amp; [self.delegate conformsToProtocol:@protocol(AuthRootControllerDelegate)]) {
[self.delegate authRootControllerDidEnd:sender];
}
}
@end
Когда я использую метод
-(void)authRootControllerDidEnd:(UINavigationController *)sender
он не срабатывает. Есть идеи?
Ответ №1:
Вы объявили, что ваш делегат соответствует authootcontrollerdelegate? Тест conformsToProtocol проверяет, объявляет ли делегат соответствие, он не выполняет никакой проверки методом за методом. Таким образом, даже если вы внедрили authootcontrollerdidend: в вашем делегате, conformsToProtocol все еще может возвращать NO .
Ответ №2:
В вашем интерфейсе вы не объявляете его как реализующий протокол делегирования, вам нужно изменить объявление вашего интерфейса следующим образом:
@interface AuthRootController : UINavigationController<AuthRootControllerDelegate> {