我有一个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有效,但似乎没有其他任何作用。

最佳答案

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


您的类在self上指定的初始化程序,或者
在这种情况下,这是指定的初始化程序,因此应在super上调用父类的指定的初始化程序。


在这种情况下,[super initWithTitle:]像这样:

-(id)initWithTitle:(NSString *)title {
    if((self = [super initWithTitle:title])){
        //initializer code
    }
    return self;
}


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

完成此操作后,请检查您的文本颜色是否为nil或与背景相同,如果仍然有问题,请检查0%的alpha。

09-18 02:49