以编程方式完成时未显示工具栏

Posted

技术标签:

【中文标题】以编程方式完成时未显示工具栏【英文标题】:ToolBar not shown when done programmatically 【发布时间】:2012-01-04 04:25:33 【问题描述】:

我从 IB 中删除了 ToolBar 控件,而是尝试通过代码创建。我尝试了以下在网上找到的代码。我没有在“viewWillAppear”中编写此代码,而是将代码放在同一个 UIViewController 导航栏中的“栏按钮项”中。

- (void)viewWillAppear:(BOOL)animated

[super viewWillAppear:animated];

//Initialize the toolbar
toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = UIBarStyleDefault;

//Set the toolbar to fit the width of the app.
[toolbar sizeToFit];

//Caclulate the height of the toolbar
CGFloat toolbarHeight = [toolbar frame].size.height;

//Get the bounds of the parent view
CGRect rootViewBounds = self.parentViewController.view.bounds;

//Get the height of the parent view.
CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);

//Get the width of the parent view,
CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);

//Create a rectangle for the toolbar
CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth,  toolbarHeight);

//Reposition and resize the receiver
[toolbar setFrame:rectArea];

//Create a button
UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(info_clicked:)];

[toolbar setItems:[NSArray arrayWithObjects:infoButton,nil]];

//Add the toolbar as a subview to the navigation controller.
//[self.navigationController.view addSubview:toolbar];

// Instead of adding to a navigation controller (which I don't have), I'm adding directly to the view and is not shown at all.

// Hiding the tabBar before I show the toolbar    
[self.tabBarController.tabBar setHidden:YES];

[self.view addSubview: self.toolbar];

我在这里做错了什么?我是否必须有可用的 info_clicked 方法(点击栏按钮项)?

【问题讨论】:

也许这是我对 ios 显示的无知,但不是任何视图子类的默认初始化程序-initWithFrame: 【参考方案1】:

这对我有用....

    UIToolbar *toolbar = [[UIToolbar alloc]init];
 toolbar.frame = CGRectMake(0, 0, self.view.frame.size.width,44);
 UIBarButtonItem *infoButton = [[UIBarButtonItem alloc]initWithTitle:@"back"style:UIBarButtonItemStyleBordered target:self action:@selector(info_clicked:)];
 [toolbar setItems:[NSArray arrayWithObjects:infoButton,nil]];
 [self.view addSubview:toolbar];
    [toolBar release];

您还需要方法 info_clicked: 来接收按钮操作。

- (IBAction)info_clicked:(id)sender
   NSLog("clicked info_button");

【讨论】:

让我告诉你我的问题:我正在使用 UITabBar 应用程序模板,我通过添加一个导航栏来扩展应用程序,该导航栏在顶部有一个栏按钮项,在底部有一个工具栏视图控制器。我只需要单击按钮,隐藏标签栏并显示工具栏。我已经通过 IB 创建了工具栏。正在发生的是标签栏隐藏和工具栏显示,但标签栏可见的地方很大。我想将工具栏移动到先前显示选项卡栏的视图底部。我很惊讶为什么它如此难以实现。请帮忙。【参考方案2】:
- (void)viewDidLoad


    UIBarButtonItem *barItem = [[UIBarButtonItem alloc]initWithTitle:@"SHOW BAR" style:UIBarButtonItemStyleBordered target:self action:@selector(showToolbar:)];
    self.navigationItem.rightBarButtonItem = barItem;


    self.toolbar = [[UIToolbar alloc]init];
    self.toolbar.frame = CGRectMake(0, 325, self.view.frame.size.width,44);
    UIBarButtonItem *infoButton = [[UIBarButtonItem alloc]initWithTitle:@"back"style:UIBarButtonItemStyleBordered target:self action:@selector(info_clicked:)];
    [self.toolbar setItems:[NSArray arrayWithObjects:infoButton,nil]];
    [self.toolbar setHidden:YES];
    [self.view addSubview:self.toolbar];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

- (IBAction)showToolbar:(id)sender
    [self.tabBarController.tabBar setHidden:YES];
    [self.toolbar setHidden:NO];
  

当然,此代码仅适用于纵向模式的 iPhone。您必须更改横向或 iPad 的数字...并注意界面方向的变化。

【讨论】:

谢谢。请看图片:img85.imageshack.us/img85/421/screenshot20120103at114.png。您将从图像中观察到工具栏隐藏在选项卡栏后面。如果我隐藏标签栏,则工具栏显示在上方,并且有一个很大的空间(标签栏可见的地方)。我需要将工具栏移动到标签栏的确切位置。在工具栏正确显示后,我需要修改标签(显示为 1)。只是想让您知道标签栏是从 appdelegate.m 中的代码(标签栏应用程序模板)动态创建的。我修改了您的代码以移动 400 而不是 325。【参考方案3】:

你好朋友,这段代码也可以帮助你...

 UIToolbar *toolbar = [[UIToolbar alloc]init];
    toolbar.frame = CGRectMake(0, 960, self.view.frame.size.width,44);
    UIBarButtonItem *infoButton = [[UIBarButtonItem alloc]initWithTitle:@"back"style:UIBarButtonItemStyleBordered target:self action:@selector(info_clicked:)];
   // [toolbar setBarStyle:UIBarStyleBlackTranslucent];
[toolbar setAutoresizesSubviews:YES];
[toolbar setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[toolbar setItems:[NSArray arrayWithObjects:infoButton,nil]];
[self.tabBarController.view addSubview:toolbar];
[self.tabBarController.view bringSubviewToFront:toolbar];
[self.tabBarController.tabBar setHidden:YES];

实际上标签栏是视图控制器之一,因此您可以在标签栏本身添加工具栏,解决您以前的问题。祝您有美好的一天!!!。

【讨论】:

谢谢。我一定会试一试的。但是,这个怎么样?我可以使用 IB 添加工具栏和栏按钮项目,然后在导航栏按钮中单击,从您的 sn-p 添加特定代码以将工具栏作为子视图分配给 tabbarcontroller?那会起作用吗,还是我必须从代​​码中做所有事情?顺便说一句,你看我之前链接的图片了吗? 我已经看过你的屏幕截图了。我创建了标签栏应用程序,然后以编程方式添加工具栏当我在 self.view 中添加工具栏作为子视图时,我也面临同样的问题,在我分析标签栏是标签栏的子视图后,它位于标签栏的后面(就像你的屏幕截图)使用此代码的视图控制器在其中添加了工具栏。[self.tabBarController.view addSubview:toolbar] 它对我来说很好祝愿!为您的成功

以上是关于以编程方式完成时未显示工具栏的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式工具栏项目不显示iOS swift 4

栏按钮项以编程方式添加工具栏

当验证器返回“无效”时,如何以编程方式在 TextInput 上显示工具提示?

如何以编程方式在云工具包中标记可查询的记录类型

以编程方式在iPhone键盘顶部移动工具栏

以编程方式添加到 collectionviewcell 时未启用按钮