以编程方式将 UILabel 添加到工具栏

Posted

技术标签:

【中文标题】以编程方式将 UILabel 添加到工具栏【英文标题】:Programmatically add UILabel to toolbar 【发布时间】:2012-05-21 21:35:01 【问题描述】:

我正在尝试以编程方式将UILabel 添加到我的UIToolBar 中,但它似乎没有出现。这就是我对代码所做的事情。

- (void) viewWillAppear:(BOOL)animated 

    // Create custom toolbar at top of screen under navigation controller
    [matchingSeriesInfoToolBar setFrame:CGRectMake(0, 60, 320, 30)];  
    matchingSeriesInfoToolBar = [UIToolbar new];
    [matchingSeriesInfoToolBar sizeToFit];
    CGFloat toolbarHeight = 30;
    CGRect mainViewBounds = [[UIScreen mainScreen] applicationFrame];
    [matchingSeriesInfoToolBar setFrame:CGRectMake(CGRectGetMinX(mainViewBounds), 0, CGRectGetWidth(mainViewBounds), toolbarHeight)];
    matchingSeriesInfoToolBar.tintColor = [UIColor darkGrayColor];
    [self.view addSubview:matchingSeriesInfoToolBar];

    // Create size of uitableview (to fit toolbar.
    [matchingSeriesTableView setFrame:CGRectMake(0, 30, self.view.frame.size.width, self.view.frame.size.height - 30)];
    [self.view addSubview:matchingSeriesTableView];

    // Ad UILabel to the toolbar
    UIBarButtonItem *textFieldItem = [[UIBarButtonItem alloc] initWithCustomView:manufSelectionLabel];
    matchingSeriesInfoToolBar.items = [NSArray arrayWithObject:textFieldItem];
    manufSelectionLabel.text = @"Hello World!";

    [super viewWillAppear:animated];

几乎我已经创建了一个自定义工具栏,我已经从屏幕底部更改了通常的位置,出现在UINavigationController 下,这也像这样添加到视图中,因此它在视图中正确动画过渡..

之后我创建了 tableview 的大小,以便它出现在自定义工具栏之后..

然后从那里我尝试将UILabel 添加到工具栏.. 但由于某种原因它无法正常工作。

任何帮助将不胜感激。

【问题讨论】:

仅供参考:此代码应位于viewDidLoad 或每次您的视图出现时(可能包括在另一个视图上按下后退按钮!)您将获得另一个工具栏等:) 哦,是的!抱歉,我之前一直在制作导航工具栏动画,因此曾尝试在此工作..但我从未从那里获取代码..我非常努力地试图让这个工具栏运行,但我没有看到。感谢您的提醒 【参考方案1】:

您必须在某处实际创建标签。这段代码运行良好。

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.view addSubview:toolbar];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
label.backgroundColor = [UIColor clearColor];

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:label];
toolbar.items = [NSArray arrayWithObject:item];

label.text = @"Hello World";

【讨论】:

感谢这与我当前的工具栏完美配合.. 我只是跳过了前两行,然后在倒数第二行将工具栏更改为 mytoolbarname 并且效果很好.. 非常感谢。 如果工具栏上有按钮,标签会吃掉按钮。 @Shailesh 我不确定你所说的“吃掉按钮”是什么意思。如果您在 IB 中添加了一个按钮,那么您需要确保该按钮仍在 toolbar.items 数组中。如果标签覆盖了按钮,则需要确保其大小和位置正确。【参考方案2】:

在您发布的代码中,您从未创建过UILabel。您的评论说 工具栏上的广告 UILabel 但您随后继续使用自定义视图 manufSectionLabel 制作 UIBarButtonItem

创建manufSectionLabel的代码在哪里?


PS 这行什么都不做:

[matchingSeriesInfoToolBar setFrame:CGRectMake(0, 60, 320, 30)];

因为此时matchingSeriesInfoToolbar 是nil - 你还没有成功!

【讨论】:

opps matchingSeriesInfoToolBar 应该已经被删除了,它是我的旧代码的一部分,我正在乱搞,但是当我准备好这个问题时,我就把它留在了。至于你问题的第一部分,我是在头文件中为 uilable 设置 getter 和 setter .. 然后我应该调用 ** manufSelectionLabel.text = @"Hello World!";** 在我尝试将标签添加到 uibarbutton 之前? 我添加子视图等的概念真的很缺乏。你有任何建议的教程,阅读材料,我可以得到帮助加强我的那部分代码。 拥有 getter 和 setter 并不会真正创建和配置标签。你必须把它分配到某个地方。如果您确实在 getter 中创建了标签,那么您必须使用 getter 而不是直接访问 ivar(即 self.manufSectionLabel)。

以上是关于以编程方式将 UILabel 添加到工具栏的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将 UILabel 添加到 CollectionViewCells

以编程方式将 UILabel 添加到 UICollectionViewCell

以编程方式将点击手势添加到 UILabel

以编程方式将 UILabel 添加到集合单元,快速

以编程方式将 UILabel 添加到自定义 tableViewCell

以编程方式将 UILabel 和 UIImageViews 添加到 UIScrollView