设置自定义UINavigationBar

时间:2013-08-11 04:25:19

标签: iphone ios uinavigationbar

大家好,我的自定义导航栏有问题。

我需要创建一个自定义导航栏,这将在多个视图控制器中使用,因此我将其创建为UIViewController的类别,并使用以下代码创建我需要的自定义。

- (void)setCustomLabel:(NSString *)labelText
{
    UILabel *navigationLabel = [[UILabel alloc]initWithFrame:CGRectMake(60,10,40,40)];
    [navigationLabel setBackgroundColor:[UIColor clearColor]];
    navigationLabel.font = [UIFont fontWithName:@"Humanist 521 BT-Bold" size:15.0];
    navigationLabel.font = [UIFont boldSystemFontOfSize:18.0];
    navigationLabel.textColor = [UIColor whiteColor];
    navigationLabel.text = labelText;

    navigationLabel.shadowColor = [UIColor colorWithRed:241.0/255.0 green:241.0/255.0 blue:241.0/255.0 alpha:1.0];
    navigationLabel.shadowOffset = CGSizeMake(0.0, -1.0);

    [navigationLabel sizeToFit];

    [self.navigationController.navigationBar addSubview:navigationLabel];

    [navigationLabel release];

}

在第一个视图中有2个按钮signIn和Register当我点击signIn按钮时它将带我登录视图,当我点击注册按钮时它将带我进入注册视图。 我创建了2个ViewControllers并使用代码将两个视图中的navigationBarLabel设置为Register和SignIn:

[self setCustomLabel:@"REGISTER"]; 

[self setCustomLabel:@"SIGN IN"];

视图的标题显示为enter image description here

enter image description here

当我第一次运行应用程序并单击寄存器或signIn按钮时它确实看起来这样,但是如果我点击任意2个按钮导航到寄存器或signIn视图然后我返回并单击第二个按钮导航栏更改为

enter image description here

请帮助我,我已经在这很长一段时间了,我在viewDidAppear中设置了导航栏,我也尝试将其设置为nil

[self setCustomLabel:nil];

在viewWillDisappear和viewDidDisappear中。我是iPhone开发的新手帮助我

2 个答案:

答案 0 :(得分:2)

这是因为您标签添加到导航栏。因为它是相同的导航栏,无论你去多少视图,它只是不断向栏添加新标签并将它们留在那里。

我看到它的方式你有两种方法可以解决这个问题:

  1. 您可以一次创建一个单一标签,并将其始终放在导航栏上,只需在方法中设置其文本,使其始终具有正确的文本,并在您不希望它时将其设置为隐藏可见。

  2. 您可以执行相同的操作,但在标签上添加tag,在创建新标签之前,您可以遍历NavigationBar的子视图并删除检查标签的旧标签。

答案 1 :(得分:0)

当您添加新标签时,您不会从导航栏中删除标签。 当您想要设置一个新的时,也许应该尝试在其上调用[navigationLabel removeFromSuperview]。 (这意味着您可能必须将其存储在@property中)

示例:

头文件:

@property (assign, nonatomic) UILabel *navigationLabel;

实施档案:

@synthesize navigationLabel

- (void)setCustomLabel:(NSString *)labelText {
    if (self.navigationLabel) [self.navigationLabel removeFromSuperview];

    self.navigationLabel = [[UILabel alloc]initWithFrame:CGRectMake(60,10,40,40)];
    [self.navigationLabel setBackgroundColor:[UIColor clearColor]];
    self.navigationLabel.font = [UIFont fontWithName:@"Humanist 521 BT-Bold" size:15.0];
    self.navigationLabel.font = [UIFont boldSystemFontOfSize:18.0];
    self.navigationLabel.textColor = [UIColor whiteColor];
    self.navigationLabel.text = labelText;

    self.navigationLabel.shadowColor = [UIColor colorWithRed:241.0/255.0 green:241.0/255.0 blue:241.0/255.0 alpha:1.0];
    self.navigationLabel.shadowOffset = CGSizeMake(0.0, -1.0);

    [self.navigationLabel sizeToFit];

    [self.navigationController.navigationBar addSubview:self.navigationLabel];

    [self.navigationLabel release];

}