正确的方式使用UINavigationController的initWithNavigationBarClass:toolbarClass:
从苹果文档我明白,UiNavigationController可以使用initWithNavigationBarClass与另一个Uinavigationbar实例化:toolbarClass:method。 如何通过一个自定义的UiNavigationBar子类和IB正确地做到这一点?
您可以像这样使用它来初始化导航控制器,
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class] toolbarClass:nil];
这里CustomNavigationBar
是通过子类化UINavigationBar
创build的自定义类。 您可以使用UINavigationController的setViewControllers
属性设置setViewControllers
。
如果你想在IB做这个,试试这个。 从对象中select导航栏,然后在身份检查器中select导航栏的自定义类。
在Interface Builder中,单击导航控制器内的导航栏。 在右侧面板上检查它,并将自定义类从UINavigationBar
更改为您的自定义子类。
在代码中,确保你已经导入你的导航栏子类的头文件,并写下类似于以下内容。
// This code assumes `MyCustomNavigationBar` is the name of your custom subclass, and that `viewController` is a UIViewController object created earlier. // To create the containing navigation controller UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyCustomNavigationBar class] toolbarClass:[UIToolbar class]]; // To set the root view controller in the navigation controller navigationController.viewControllers = @[viewController];
上面的代码通知UIKit创build一个带有子类MyCustomNavigationBar
导航栏的UINavigationController
。 然后,它将根视图控制器设置为存储在variablesviewController
的对象。
本杰明·梅奥(Benjamin Mayo)的答案就是为了你的一般小类
- (UINavigationController *)initWithRootViewController:(UIViewController *)rootViewController navigationBarClass:(Class)navigationBarClass { self = [super initWithNavigationBarClass:navigationBarClass toolbarClass:UIToolbar.class]; if (self) { self.viewControllers = @[rootViewController]; } return self; }
- 实例化存储在metatype字典中的类
- NSOperationQueue,并发操作和线程
- 使用NSUserDefaults保留MPMediaItemCollection对象
- setStatusBarHidden不起作用
- UITableViewCell中UIView的2个圆angular不起作用
- 在asynchronousHTTP请求的completionHandler中更新视图时延迟
- 使用多个自定义的UITableViewCells
- 在UIImage并列在视网膜显示的奇怪arctefact
- 使用UIPageViewControllerDataSource时,在UIPageViewController中以编程方式翻页?