【问题标题】:Custom uinavigatonbar exception自定义 uinavigatonbar 异常
【发布时间】:2011-06-03 09:21:09
【问题描述】:

我用这种方式制作了一个自定义的导航栏:

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawRect:(CGRect)rect {
        UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

现在我想添加异常以在我将特定视图控制器加载到导航控制器时显示正常的导航栏。

我如何编码该异常?

【问题讨论】:

    标签: iphone sdk uinavigationcontroller uinavigationbar


    【解决方案1】:

    我认为 UINavigationBar 上的类别不可能做到这一点。 我会建议一个子类,比如CustomNavigationBar

    .h

    #import <UIKit/UIKit.h>
    
    @interface CustomNavigationBar : UINavigationBar {
    }
    @end
    

    .m

    #import "CustomNavigationBar.h"
    
    @implementation CustomNavigationBar
    
    - (void)drawRect:(CGRect)rect {
            UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
            [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    }
    
    @end
    

    棘手的是你永远不会自己创建UINavigationBar,这一切都由 UIKit 处理。要仅更改某些条的外观,您必须在运行时手动更改它们的类。

    导入

    #import <objc/runtime.h>
    

    然后在您的视图控制器中(例如在 viewDidLoad 中),添加

    object_setClass(self.navigationController.navigationBar, [CustomNavigationBar class]);
    

    【讨论】:

    • 惊人的解决方案。像魅力一样工作。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2015-02-05
    • 2011-02-11
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多