将 UIToolbar 添加到窗口

Posted

技术标签:

【中文标题】将 UIToolbar 添加到窗口【英文标题】:Adding UIToolbar to window 【发布时间】:2009-09-23 12:56:35 【问题描述】:

我有一个基于导航的应用程序,我正在尝试添加一个独特的 UIToolbar,无论当前视图是哪个,它都将保持不变,使用以下方法:

Persistent UIBarButtonItem in UIToolbar?

问题是我在给navigationController设置框架的时候,navigationController里面的UITableView在导航栏下移动了20px,就好像它开始在状态栏后面画一样。

关于如何解决此问题的任何想法?我被困住了!

【问题讨论】:

【参考方案1】:

我最终使用了 navigationController 的内置工具栏。

所以在每个 viewDidLoad 上,我都将当前的 toolbarItems 设置为同一个数组:

- (void)viewDidLoad 
    [super viewDidLoad];

    MyDelegate *appDelegate = (MyDelegate *)[[UIApplication sharedApplication] delegate];
    [self setToolbarItems:[appDelegate toolbarItems] animated:YES];

我没有看到任何转换,如果我需要在特殊的 viewController 上设置,我总是可以将其设置为不同的按钮。

也许这就是它应该做的方式。奥卡姆剃刀,有人吗? :)

【讨论】:

leolobato 你用你的问题/答案为我节省了一些时间。关于这个实现,我注意到了一件小事:如果你在 UIViewController 之间移动时仔细观察你的 UIToolbar,它实际上确实会再次淡入淡出工具栏项目。我现在将使用这种解决方案,并着眼于独立 UIToolbar(在 UINavigationController 之外)中的理想解决方案。【参考方案2】:

在向 UIWindow 添加子视图时,我经常遇到这种情况。我尝试了人们的各种建议,但最终只是将框架原点向下移动了 20px 以适应状态栏。

【讨论】:

我试过了,但是导航栏会沿着 tableView 移动,所以我最终在所有内容上方都有一个 20 像素的空白白条。而且 tableView 仍然是隐藏的。 你能否发布一个链接到正在运行的应用程序的屏幕截图,这可能有助于我更好地了解正在发生的事情。【参考方案3】:

我创建了一个从 UIToolbar 派生的自定义对象,并添加了一个名为 staticItems 的属性,我在 init 方法中填充了 3 个 UIBarButtonItem(及其逻辑)

我已将“显示工具栏”设置为我的 UINavigationController 对象,并将工具栏的类更改为我的新类。

然后我将导航的父对象设置为导航的委托,并实现了这些方法

- (void)navigationController:(UINavigationController *)navigationController  willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

    [viewController setToolbarItems:downloadToolbar.staticItems animated:NO];

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

真正接近你所做的,更容易维护。希望能帮助别人。

【讨论】:

以上是关于将 UIToolbar 添加到窗口的主要内容,如果未能解决你的问题,请参考以下文章

iOS7 UIToolbar 崩溃

iPhone Dev - UIToolbar 进入窗口或视图?

将 UIBarButtonItem 添加到 UIToolbar

如何将 uitoolbar 添加到 uitableviewcontroller?

如何将 UIToolbar 添加到 UIViewController?

将 UITextField 添加到 UIToolbar 不起作用