Итак, поскольку я слишком паршив, чтобы написать совершенно новую панель вкладок, я решил исследовать и попытаться взломать UITabBarController.
И вот решение:
Фактическая проблема заключается в том, что когда вы касаетесь элемента панели вкладок с индексом выше 4, UITabBarController фактически отображает moreNavigationController.Это UINavigationController, содержащий представление типа UIMoreViewControllerList, который является типом из частной платформы Cocoa вместе с экземпляром выбранного вами ViewController.
Так как же нам избавиться от кнопки «Дополнительно»?
Просто удалите UIMoreViewControllerList из коллекции moreNavigationController, оставив только выбранный вами ViewController.
-(void)setSelectedViewController:(UIViewController *)selectedViewController
{
[super setSelectedViewController:selectedViewController];
if([self.moreNavigationController.viewControllers count] > 1)
{
//Modify the view stack to remove the More view
self.moreNavigationController.viewControllers = [[[NSArray alloc] initWithObjects:self.moreNavigationController.visibleViewController, nil] autorelease];
}
}
Хорошо, что оставляет нас с кнопкой «Редактировать» в верхнем правом углу (заголовок заголовка).
Как вы тогда избавитесь от этого?
Да.Это еще один грязный взлом.Чтобы удалить кнопку «Редактировать», мне фактически пришлось бы реализовать один метод из UINavigationControllerDelegate для moreNavigationController в моем пользовательском UITabBarController.
//navigationController delegate
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([navigationController isKindOfClass:NSClassFromString(@"UIMoreNavigationController")])
{
// We don't need Edit button in More screen.
UINavigationBar *morenavbar = navigationController.navigationBar;
UINavigationItem *morenavitem = morenavbar.topItem;
morenavitem.rightBarButtonItem = nil;
}
}
И это способ убрать стандартную функциональность More.Я действительно думаю, что Apple разозлила свои штаны, создавая UITabBarController, который обрабатывает логику и пользовательский интерфейс.Почему бы не создать контроллер, который имеет логику для предварительной загрузки ViewControllers и переключения между ними, а затем - реализацию, которую вы можете использовать, если вам нужна дополнительная вещь.- Или даже лучше: сделайте возможным отключение функции Больше.