UIButton 隐藏在 UIToolbar 后面

Posted

技术标签:

【中文标题】UIButton 隐藏在 UIToolbar 后面【英文标题】:UIButton hidden behind UIToolbar 【发布时间】:2013-04-26 03:28:44 【问题描述】:

上下文

我有一个要添加的 UIButton,方法如下:

[self.view addSubview:[self returnCustomSubmitButton]];

我没有将工具栏添加为子视图,而是将 ViewControllers navigationController 属性 toolBarHidden 设置为 NO。 - [self.navigationController setToolbarHidden:NO animated:NO]; at viewWill 会出现

额外细节

我这样做的原因是因为我想在下面创建类似于工具栏的东西(注意:这是一个 UITabBar,但我正在寻找相同的形状) - 所以我要添加一个工具栏,然后添加一个 UIButton 到 viewControllers 视图并使用工具栏坐标来定位 UIButton

我试图遵循这一点(注意:这也是针对 UITabBar 的),但正在苦苦挣扎:http://idevrecipes.com/2010/12/16/raised-center-tab-bar-button/

问题

(我希望它位于工具栏的顶部)。

问题

我该如何解决这个问题? 将 UIButton 转换为 UIBarButtItem 会更好吗?并将 UIButton 添加到 viewController 的 toolbarItems 数组? 我该怎么做?

更新

经过多次尝试解决这个问题,这是否与我正在使用 UINavigationController 以及我将 UIButton 添加到“自定义内容”区域并且导航工具栏位于其顶部的事实有关无论我做什么。见下文:

【问题讨论】:

只是为了避免混淆......这个(截图+链接)是UITabBar 好点 - 我将包括问题。 关于您的上次更新(自定义内容),我在回答中对此进行了解释。 【参考方案1】:

虽然我认为最好的解决方案是以编程方式创建您的UIToolbar,然后创建并添加任何自定义UIBarButtonItems,但您的问题可能有以下解决方案:

注意:Apple 表示you must not try to modify UINavigationController's default toolbar,因此如果您打算这样做,请尝试上述建议)

- (void)viewDidLoad

    [super viewDidLoad];

    // Show the default toolbar
    [self.navigationController setToolbarHidden:NO];

    // Create a UIButton
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:[UIImage imageNamed:@"btn"] forState:UIControlStateNormal];
    [button sizeToFit];

    // Add your targets/actions
    [button addTarget:self action:@selector(doSomething:) forControlEvents:UIControlEventTouchUpInside];

    // Position the button
    // I am sure that there must be
    // a million better ways to do this
    // (it's here just to illustrate the point)
    button.center = self.navigationController.toolbar.center;
    CGRect frame = button.frame;
    frame.origin.y = CGRectGetMaxY([UIScreen mainScreen].bounds) - button.frame.size.height;
    button.frame = frame;

    // Here is the tricky part. Toolbar is not part
    // of your controller's view hierarchy, it belongs
    // to the navigation controller. So add the button there 
    [self.navigationController.view addSubview:button];

【讨论】:

它还在后面。继续挖掘。 @drc 我很肯定这可行,在发布答案之前我已经测试了代码。 我会继续努力让它发挥作用。感谢您迄今为止的帮助和您的时间,非常感谢。 不用担心。我总是很乐意提供帮助。 您能否澄清您对 Apple 指南关于不修改“默认工具栏”的评论,我计划在应用程序中使用自定义工具栏,我正在创建一个 UIToolBar 并将其添加为UIViewController,但是我恢复使用navigationController setToolBarHidden NO,因为我正在努力保持工具栏@正确的Y位置。该应用程序还在特定上下文中隐藏和显示导航栏,当尝试支持 4 英寸屏幕高度时,它变得过于复杂,无法继续设置“自定义”工具栏的框架。【参考方案2】:

利用这段代码。

  [self.view bringSubviewToFront:yourButton];

这应该可以解决您的问题。

【讨论】:

这似乎不起作用,让我明天跟进更多细节。 我没有将工具栏添加为子视图,我将 ViewControllers navigationController 属性 toolBatHidden 设置为 NO。 - [self.navigationController setToolbarHidden:NO动画:NO];在视图中会出现【参考方案3】:

使用此代码

[self.view insertSubview:[self returnCustomSubmitButton] aboveSubview:toolbar];

那么您的按钮将位于工具栏上方。

【讨论】:

谢谢,这似乎也不起作用,让我早上再检查一下。【参考方案4】:
UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
NSMutableArray *items = [[NSMutableArray alloc] initWithObjects:your buttons, nil]
[toolbar setItems:items];
[self.view addSubview:toolbar];

这可能对你有帮助

【讨论】:

按钮是 UIButton 而不是 UIBarButtonItem。

以上是关于UIButton 隐藏在 UIToolbar 后面的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView交互隐藏uitoolbar

如何用 UIToolbar 之类的色调绘制 UIButton

UIButton 不工作。不是第一响应者或隐藏在视图后面

如何在 UIToolbar 完成按钮中将焦点从一个 UIButton 设置到另一个 UIButton

如何以编程方式将 UIButton 添加到 UIToolBar?

未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到