为自定义UINavigationBar设置代理

问题描述:

我想添加自定义元素,包括下拉列表和视图从我的navigationBar更改,因为这我需要一个自定义元素。但是,当试图将委托设置到我的视图控制器时,它会引发错误。为自定义UINavigationBar设置代理

@interface MyViewController : UIViewController <MyCustomNavigationBarDelegate> 

@implementation MyViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UINavigationController *nav = [[UINavigationController alloc] initWithNavigationBarClass:[MyCustomNavigationBar class] toolbarClass:[UIToolbar class]]; 
    nav.navigationBar.assessmentDelegate = self; 
} 

最后一行抛出Error属性“assessmentDelegate”在类型的对象没有找到“UINavigationBar *”但是它应该是类型MyCustomNavigationBar类,明确了委托:

@protocol MyCustomNavigationBarDelegate; 

@interface MyCustomNavigationBar : UINavigationBar 

@property (weak, nonatomic) id <MyCustomNavigationBarDelegate> assessmentDelegate; 

@end 

@protocol MyCustomNavigationBarDelegate <NSObject> 

-(void)presentViewController:(UIAlertController *)alert; 

@end 
+0

你的问题似乎是合理的,如果天真的一点点,所以我upvoted它。 –

+0

请注意您正在使用的'initWithNavigationBarClass'方法可能会让您的生活变得困难。该文档说:“要自定义导航栏的整体外观,请使用UIAppearance API而不是此方法。如果使用此初始化方法创建使用自定义小节子类的导航栏,则负责在呈现之前推送和设置视图控制器屏幕上的导航控制器。“所以这听起来像是在使用这种方法时,你可以承担相当数量的额外家务劳动。 –

+0

谢谢是的,我把它交给了Shubhank离开的代码。 –

投你navigaton酒吧到MyCustomNavigationBar

MyCustomNavigationBar *switchNav = (MyCustomNavigationBar *)nav.navigationBar; 
switchNav.assessmentDelegate = self 
+0

谢谢,我很想知道为什么我是downvoted,但这很好! –

+0

是的,不知道为什么它downvoted。好问题,我做了我的upvote。 – Shubhank