将 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 添加到窗口的主要内容,如果未能解决你的问题,请参考以下文章
iPhone Dev - UIToolbar 进入窗口或视图?
将 UIBarButtonItem 添加到 UIToolbar
如何将 uitoolbar 添加到 uitableviewcontroller?