在我的iphone应用程序中,我试图让我的uinavigationbar充当按钮,我的意思是当我触摸它时做点什么。没有后退按钮o任何导航项,栏本身。 继承人我如何“分类”它:
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIColor *color = [UIColor blackColor];
UIImage *img = [UIImage imageNamed: @"bar.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
self.tintColor = color;
}
行动将导航到某个视图..
任何想法?
提前谢谢!
答案 0 :(得分:1)
不要使用类别来覆盖类中的方法。来自Objective-C Programming Language指南:
虽然该语言目前允许 你要用一个类别来覆盖 类继承的方法,甚至是 在类中声明的方法 界面,你是强烈的 不鼓励使用它 功能。一个类别不是 替换子类。有 几个重大缺点:
当某个类别覆盖继承的类别时 方法,类别中的方法 像往常一样,可以调用继承的 通过消息实现到超级。 但是,如果某个类别覆盖了 已经存在的方法 类别的类,没有办法 调用原始实现。
类别无法可靠地覆盖 在另一类别中声明的方法 同一类。这个问题是 因为许多人的特殊意义 Cocoa类已实现 使用类别。框架定义的 您尝试覆盖的方法本身可能 已经在一个类别中实施, 以及实施所需的 优先权未定义。
某些方法可能存在 导致所有行为发生变化 构架。例如,如果添加一个 windowWillClose:to的实现 NSObject,这将导致所有窗口 代表们回应这种方法 并可能会修改所有人的行为 NSWindow实例的实例。这个 可能会导致神秘的变化 行为并可能导致崩溃。
相反,您最好只需创建一个透明视图或按钮来响应触摸并将其放置在UINavigationController的条形区域上方。然后,此透明视图可以捕获针对整个酒吧区域的触摸事件。
然而,我认为你真正努力实现这一目标。从内置界面元素覆盖标准用户交互可能会导致用户感到沮丧甚至被Apple拒绝。
答案 1 :(得分:0)