对UINavigationItem进行子类化

时间:2011-08-03 21:37:30

标签: iphone objective-c subclass uinavigationitem

我有navigationItem的子类,因为我想更改导航标题标签的文本,字体,颜色等。

我的customNavigationItem.h

有以下内容:
@interface CustomNavigationItem : UINavigationItem {

}
@end

customNavigationItem.m我只有一种方法:

-(id) initWithTitle:(NSString *)title{

NSLog(@"initWithTitle");

CGRect frame = CGRectMake(0, 0, 156, 44);

UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = [DataSingleton sharedMySingleton].navigationTitleFont;
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.0];
label.textColor = [DataSingleton sharedMySingleton].textColor;
label.text =  NSLocalizedString(@"Events", @"");  

self.titleView = label;

return self;
}

问题:UIViewController中,我初始化了initWithNibName中的导航项,将其连接到nib文件中,并将“CustomNavigationItem”作为IB中的自定义类。

nslog有效,但似乎没有其他工作。

1 个答案:

答案 0 :(得分:3)

您需要将init方法传播到父类。当你的方法命名为initWithSomething时,它应该调用:

  • 您{class 1}}上的指定初始值设定项,或
  • 在这种情况下,此指定的初始化程序,因此应该在self上调用父类的指定初始值设定项。

在这种情况下super - 类似这样的事情:

[super initWithTitle:]

否则,父类的init代码永远不会被执行,该类将无法正确初始化,并且保证不会有任何工作。

完成后,检查您的文字颜色是否为零,或与背景相同,如果您仍有问题,请检查0%alpha。