【发布时间】:2012-03-12 03:24:35
【问题描述】:
我有一个导航控制器作为我的应用程序的根,我正在使用外观代理来自定义 iOS 5 上的外观,但对于 iOS 4,我希望使用一个类别来覆盖 drawRect:,这很好,除了所有导航栏都受到影响,正如您对某个类别所期望的那样。
我不想篡改“系统”弹出窗口,例如邮件编辑器或短信编辑器,我希望它们的栏保持蓝色和系统般的状态。
我尝试用它的 xib 创建我自己的 UINavigationController,并将 NavigationBar 的类更改为我自定义的 UINavigationBar 子类。但结果在屏幕上根本没有影响。
我知道以下帖子,但无法按预期运行任何解决方案。 How to subclass UINavigationBar for a UINavigationController programmatically?
我的第一次尝试确实有效,但使用了未记录的 setNavigationBar: 方法:
_myNavigationController = [[UINavigationController alloc] initWithRootViewController:someVC];
if([[BT_NavigationController class] respondsToSelector:@selector(appearance)]){
// some iOS 5 magic in here !
[_myNavigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"topbar.png"];
}else{
// Probably looking at app store refusal
CustomBar * bar = [[CustomBar alloc] init];
// [_myNavigationController setNavigationBar: bar];
[bar release];
}
[parentView presentModalViewController:_myNavigationController animated:YES];
为了避免我创建了一个 UINavigationController,我也有一个 xib,将导航栏的类重新分配给我的自定义类,但在 drawRect: 方法中放置断点,我可以看到它没有被调用。
为什么会这样,我的代码似乎没有加载 nib,因此没有意识到 nab bar 应该是我的自定义类而不是 UINavigationBar。
任何提示都会有所帮助,谢谢。
【问题讨论】:
标签: ios uinavigationcontroller uinavigationbar