繁体   English   中英

自定义UITabBarController的moreNavigationController

[英]Customizing UITabBarController's moreNavigationController

我正在我的应用程序的UITabBarController中自定义“更多”视图。

从我在文档中看到的内容来看,很少有人支持自定义它。 UITabBarController只有一个名为'moreNavigationController'的只读属性,它指向UINavigationController。

这使我们至少可以自定义它的UINavigationBar。 自定义它在第一个视图控制器中显示的表视图有点棘手。

关于SO和其他地方的其他问题,我已经看到所有的讨论围绕着搞乱moreNavigationController的内部结构(例如,观察堆栈中的第一个视图控制器是UITableViewController,交换它的数据控制器等等)。 )。 问题是所有这些方法都假设API中未记录的代码如何表现,这些假设很难面向未来。

我在这里看到的唯一选择是滚动我自己的自定义“更多控制器”(可选地放弃编辑功能以保持实现相当简单)并将其用作选项卡中的第五个视图控制器。 当然必须注意将后续视图控制器分配给自定义“更多控制器”而不是直接分配给UITabBarController(可能需要对UITabBarController进行子类化以强制执行此规则)。

你会选择哪种方法? 你会建议其他什么解决方案?

我会选择推出自己的自定义控制器有三个原因:

  1. moreViewControllerUIKit控制。 在外部,很难自定义一些视图并直接控制它们。 moreViewController会有不可预测的方法和图层定义。 它不能是基本的UITableViewController 我认为定制具有委托的类更有效。

  2. 如果您自定义moreViewController ,则每次Apple发布新iOS时,您可能必须发布新版本的应用程序。 Apple的moreViewController的开发人员可能会将整个类更改为其他类。 所以你的应用程序将停止响应。

  3. 我自己的班级,我自己的家。 我可以做任何我想做的事。

UIViewController *tbMore = 
    ((UIViewController*)
    [self.moreNavigationController.viewControllers objectAtIndex:0]);

int nRows = [((UITableView *)tbMore.view) numberOfRowsInSection:0];

for (int i = 0; i < nRows; i++)
{
    UITableViewCell *c =
        [((UITableView *)tbMore.view)
        cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];

    // Do any additional customization here!
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM