在工具栏中添加自定义标签不起作用



我正试图在UINavigationController的工具栏中添加一个自定义标签。我遵循了这个问题的最高答案,但它似乎对我不起作用,我也不知道为什么。自定义文本没有显示,但按钮在那里。当我按下它时,它会高亮显示,但它没有文本。

这是我的代码:

- (void) editToolbar{
    NSArray *toolbarItemsCopy = [self.toolbarItems copy];
    //set up the label
    self.notificationsLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0 , 11.0f, self.view.frame.size.width/0.25, 21.0f)];
    self.notificationsLabel.font = [UIFont fontWithName:@"Helvetica" size:20];
    self.notificationsLabel.backgroundColor = [UIColor clearColor];
    //self.notificationsLabel.textColor = [UIColor colorWithRed:157.0/255.0 green:157.0/255.0 blue:157.0/255.0 alpha:1.0];
    self.notificationsLabel.textColor = [UIColor blueColor];
    self.notificationsLabel.text = @"Checking server";
    self.notificationsLabel.textAlignment = UITextAlignmentCenter;
    //init a button with custom view using the label
    UIBarButtonItem *notif = [[UIBarButtonItem alloc] initWithCustomView:self.notificationsLabel];
    //add to the toolbarItems
    NSMutableArray *toolbarItemsMutableArray = [[NSMutableArray alloc]init];
    NSLog(@"toolbar %i", self.toolbarItems.count);
    //have to add the custom bar button item in a certain place in the toolbar, it should be the 3rd item
    for (int i = 0; i < toolbarItemsCopy.count; i++) {
        if (i == 2){                
            [toolbarItemsMutableArray addObject:notif];
        }
        NSLog(@"toolbar item %i %@", i,[toolbarItemsCopy objectAtIndex:i]);
        [toolbarItemsMutableArray addObject:[toolbarItemsCopy objectAtIndex:i]];
    }
    if (toolbarItemsCopy.count == 4){
    }else{
        //remove the previous custom label
        [toolbarItemsMutableArray removeObjectAtIndex:3];
    }
    self.toolbarItems = toolbarItemsMutableArray;
    //[self.navigationController.toolbar setItems: toolbarItemsMutableArray animated:YES];
    NSLog(@"toolbar %i", self.toolbarItems.count);
}https://stackoverflow.com/questions/ask

这就是NSLog正在打印的内容:

Catalogue[361:10403] toolbar 4
Catalogue[361:10403] toolbar item 0 <UIBarButtonItem: 0x8a24650>
Catalogue[361:10403] toolbar item 1 <UIBarButtonItem: 0x8a36cd0>
Catalogue[361:10403] toolbar item 2 <UIBarButtonItem: 0x8a36d30>
Catalogue[361:10403] toolbar item 3 <UIBarButtonItem: 0x8a382f0>
Catalogue[361:10403] toolbar 5

我就是这样解决的:

我必须在函数内部分配和初始化一个UILabel,而不是使用ivar。

UILabel *notificationsLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0 , 11.0f, self.view.frame.size.width, 21.0f)];
    notificationsLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
    notificationsLabel.backgroundColor = [UIColor clearColor];
    //self.notificationsLabel.textColor = [UIColor colorWithRed:157.0/255.0 green:157.0/255.0 blue:157.0/255.0 alpha:1.0];
    notificationsLabel.textColor = [UIColor whiteColor];
    notificationsLabel.text = @"Checking server";
    notificationsLabel.textAlignment = UITextAlignmentCenter;

我相信这段代码会对您有所帮助。在牢记此代码的同时对代码进行更改。我已经做了这方面的工作,它运行得很好,

UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.view addSubview:toolBar];
UILabel *titleLbl = [[UILabel alloc] initWithFrame:CGRectMake(0.0 , 11.0f,     self.view.frame.size.width, 21.0f)];
[titleLbl setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]];
[titleLbl setBackgroundColor:[UIColor clearColor]];
[titleLbl setTextColor=[UIColor blueColor];
[titleLbl setText:@"Title"];
[titleLbl setTextAlignment:UITextAlignmentCenter];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithCustomView:titleLbl];
NSArray *toolbarItemArr = [NSArray arrayWithObjects:button, nil];
[toolBar setItems:toolbarItemArr animated:YES];

为了更好地理解,您可以访问以下链接:UIToolBar类引用和UIBarButtonItem类引用

我知道这个问题已经得到了回答,而且很老了,但我也有同样的经历,发现了一些有趣的东西。根据程序的状态,我的代码有时需要(在工具栏中)显示一个按钮,有时需要显示一个标签。如果我在控制器类中创建一个UILabel对象,并在对的调用中重用它

UIBarButtonItem *myItem = [[UIBarButtonItem alloc] initWithCustomView: _myUILabel];
[self setToolbarItems: [NSArray arrayWithObject: myItem]];
[myItem release];

每次我需要从按钮切换到标签时,标签都不会显示(实际上它是第一次显示的,来回切换一次后,它就不再显示了)。我花了几个小时在这个问题上,如果不是因为我秃顶的事实,我可能会绝望地把所有的头发都拔出来。我验证了我所有的保留计数都很好。我保存的标签是好的和有效的。

我发现,如果每次需要在工具栏中显示时都创建一个新标签,那么问题就会消失。在处理setToolbarItems中的UILabel时肯定存在问题。因此,我的建议是,创建一个新标签,设置文本等,将其包装在UIToolBarItem中,然后再次设置工具栏项。

这并不理想,它练习了更多的分配和释放,但它有效。我希望这能帮助到其他人。

最新更新