带有类别的UINavigationBar,也可以作为按钮

时间:2010-08-17 17:25:21

标签: iphone cocoa-touch button uinavigationbar

在我的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;
}

行动将导航到某个视图..
任何想法?
提前谢谢!

2 个答案:

答案 0 :(得分:1)

不要使用类别来覆盖类中的方法。来自Objective-C Programming Language指南:

  

虽然该语言目前允许   你要用一个类别来覆盖   类继承的方法,甚至是   在类中声明的方法   界面,你是强烈的   不鼓励使用它   功能。一个类别不是   替换子类。有   几个重大缺点:

     
      
  • 当某个类别覆盖继承的类别时   方法,类别中的方法   像往常一样,可以调用继承的   通过消息实现到超级。   但是,如果某个类别覆盖了   已经存在的方法   类别的类,没有办法   调用原始实现。

  •   
  • 类别无法可靠地覆盖   在另一类别中声明的方法   同一类。这个问题是   因为许多人的特殊意义   Cocoa类已实现   使用类别。框架定义的   您尝试覆盖的方法本身可能   已经在一个类别中实施,   以及实施所需的   优先权未定义。

  •   
  • 某些方法可能存在   导致所有行为发生变化   构架。例如,如果添加一个   windowWillClose:to的实现   NSObject,这将导致所有窗口   代表们回应这种方法   并可能会修改所有人的行为   NSWindow实例的实例。这个   可能会导致神秘的变化   行为并可能导致崩溃。

  •   

相反,您最好只需创建一个透明视图或按钮来响应触摸并将其放置在UINavigationController的条形区域上方。然后,此透明视图可以捕获针对整个酒吧区域的触摸事件。

然而,我认为你真正努力实现这一目标。从内置界面元素覆盖标准用户交互可能会导致用户感到沮丧甚至被Apple拒绝。

答案 1 :(得分:0)