我正在我的应用程序的UITabBarController中自定义“更多”视图。
从我在文档中看到的内容中,很少有人支持自定义它。 UITabBarController只有一个名为'moreNavigationController'的只读属性,它指向UINavigationController。
这使我们至少可以自定义它的UINavigationBar。自定义它在第一个视图控制器中显示的表视图有点棘手。
关于SO和其他地方的其他问题,我看到所有的讨论都围绕着搞乱moreNavigationController的内部结构(例如观察堆栈中的第一个视图控制器是UITableViewController,交换它的数据控制器)等)。问题是所有这些方法都假设API中未记录的代码如何表现,这些假设几乎没有面向未来。
我在这里看到的唯一选择是滚动我自己的自定义“更多控制器”(可选地放弃编辑功能以保持实现相当简单)并将其用作选项卡中的第五个视图控制器。当然必须注意将后续视图控制器分配给自定义“更多控制器”而不是直接分配给UITabBarController(可能需要对UITabBarController进行子类化以强制执行此规则)。
您会选择哪种方法?你会建议其他什么解决方案?
答案 0 :(得分:4)
我会选择推出自己的自定义控制器有三个原因:
moreViewController
由UIKit
控制。在外部,很难自定义一些视图并直接控制它们。 moreViewController
中会有不可预测的方法和图层定义。它不能是基本UITableViewController
。我认为自定义具有委托的类更有效。
如果您自定义moreViewController
,则每次Apple发布新iOS时,您可能必须发布新版本的应用。 Apple的moreViewController
开发人员可能会将整个课程改为其他课程。因此,您的申请将停止响应。
我自己的班级,我自己的家。我可以做任何我想做的事。
答案 1 :(得分:4)
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!
}