2011-05-11 78 views
2

我有一个的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); 

但是有一些错误与我AuthRootController类中创建的委托:

@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 && [self.delegate conformsToProtocol:@protocol(AuthRootControllerDelegate)]) { 
     [self.delegate authRootControllerDidEnd:sender]; 
    } 
} 

@end 

当我使用方法

-(void)authRootControllerDidEnd:(UINavigationController *)sender 

它不被触发。有任何想法吗?

回答

1

你是否声明你的委托符合AuthRootControllerDelegate? conformsToProtocol测试检查代理是否声明一致性,它不会执行任何方法的方法检查。所以,即使你已经在委托上实现了authRootControllerDidEnd:conformsToProtocol仍然可以返回NO。

0

在你的界面,你不声明为实现委托协议,则需要修改你这样的接口声明:

@interface AuthRootController : UINavigationController<AuthRootControllerDelegate> {