为自定义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
答
投你navigaton酒吧到MyCustomNavigationBar
MyCustomNavigationBar *switchNav = (MyCustomNavigationBar *)nav.navigationBar;
switchNav.assessmentDelegate = self
+0
谢谢,我很想知道为什么我是downvoted,但这很好! –
+0
是的,不知道为什么它downvoted。好问题,我做了我的upvote。 – Shubhank
你的问题似乎是合理的,如果天真的一点点,所以我upvoted它。 –
请注意您正在使用的'initWithNavigationBarClass'方法可能会让您的生活变得困难。该文档说:“要自定义导航栏的整体外观,请使用UIAppearance API而不是此方法。如果使用此初始化方法创建使用自定义小节子类的导航栏,则负责在呈现之前推送和设置视图控制器屏幕上的导航控制器。“所以这听起来像是在使用这种方法时,你可以承担相当数量的额外家务劳动。 –
谢谢是的,我把它交给了Shubhank离开的代码。 –