Как отключить кнопку редактирования, которая появляется в разделе more UITabBarController? - PullRequest
25 голосов
/ 05 мая 2009

В моем приложении (на основе шаблона XCode приложения панели вкладок) я использую UITabBarController для отображения списка различных разделов приложения, к которым пользователь может получить доступ.

По умолчанию UITabBarController отображает кнопку «Дополнительно» на панели вкладок, когда имеется более 5 элементов. Кроме того, он позволяет пользователю выбирать элементы, которые он хочет видеть в панели вкладок.

В настоящее время я не могу реализовать сохранение и загрузку состояния контроллера панели вкладок, поэтому я хочу отключить кнопку «Редактировать».

Есть ли способ отключить / скрыть кнопку панели «Редактировать», которая появляется на навигационном контроллере «Больше» UITabBarController?

Я пытался:

tabBarController.moreNavigationController.navigationBar.topItem.rightBarButtonItem = nil;

и

tabBarController.moreNavigationController.navigationBar.topItem.rightBarButtonItem.enabled = NO;

но, похоже, они не работают.

Ответы [ 16 ]

59 голосов
/ 30 сентября 2009

Станьте делегатом moreNavigationController (это UINavigationController) и добавьте это:

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

    UINavigationBar *morenavbar = navigationController.navigationBar;
    UINavigationItem *morenavitem = morenavbar.topItem;
    /* We don't need Edit button in More screen. */
    morenavitem.rightBarButtonItem = nil;
}

Теперь оно не появится. Главное, что нужно учитывать, это то, что кнопка «Редактировать» появляется не после создания контроллера, а перед отображением вида, и мы должны молча сидеть до этого момента, а затем, когда контроллер будет отображать экран, мы выбьем кнопку так, чтобы у него не будет возможности создать его снова. :)

53 голосов
/ 29 июля 2009

customizableViewControllers - массив; установите его в пустой массив, чтобы отключить все редактирование.

tabBarController.customizableViewControllers = [NSArray arrayWithObjects:nil];
11 голосов
/ 05 мая 2009
tabBarController .customizableViewControllers = nil;
6 голосов
/ 28 марта 2011

Я пытался, и вот пример.

В AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    // Add the tab bar controller's view to the window and display.
    [self.window addSubview:tabBarController.view];
    [self.window makeKeyAndVisible];

    //setting delegate to disable edit button in more.
    tabBarController.moreNavigationController.delegate = self;

    return YES;
}

чтобы удалить кнопку «Редактировать»

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
        UINavigationBar *morenavbar = navigationController.navigationBar;
        UINavigationItem *morenavitem = morenavbar.topItem;
        /* We don't need Edit button in More screen. */
morenavitem.rightBarButtonItem = nil;
}

В вашем AppDelegate.h

@interface TestAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate, UINavigationControllerDelegate>

поправьте меня, если я ошибаюсь.

4 голосов
/ 04 октября 2010

Я смог заставить это работать со следующим кодом. Я создал CustomTabViewController, а затем изменил идентификатор класса контроллера панели вкладок в Интерфейсном Разработчике, чтобы использовать этот пользовательский класс. Вот код, который он использует (содержимое файла .h и .m). Ключ устанавливает для свойства значение nil, в результате чего кнопка «Редактировать» не отображается. Подробнее см .: http://developer.apple.com/library/ios/documentation/uikit/reference/UITabBarController_Class/Reference/Reference.html#//apple_ref/occ/instp/UITabBarController/customizableViewControllers «Если массив пуст или значение этого свойства равно nil, панель вкладок не позволяет изменять какие-либо элементы.»

#import <UIKit/UIKit.h>

@interface CustomTabBarController : UITabBarController {

}
@end

#import "CustomTabBarController.h"


@implementation CustomTabBarController

- (void)viewDidLoad
{
    self.customizableViewControllers = nil;
    [super viewDidLoad];
}   

@end
3 голосов
/ 21 марта 2012

Просто добавьте строку кода в метод жизненного цикла, то есть приложение завершило запуск:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{ 
    tabBarController.customizableViewControllers=nil;

}
3 голосов
/ 22 июля 2010

Я не знаю про iOS4, но имеет значение, если вы введете код в viewDidLoad против viewWillAppear.

Т.е. Это будет работать.

- (void)viewWillAppear:(BOOL)animated
{
self.customizableViewControllers = nil;
}
3 голосов
/ 09 ноября 2009

Этого можно добиться вот так. Это не самое элегантное решение, но оно работает ™.

// Optional UITabBarControllerDelegate method
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    [self performSelector:@selector(removeEdit) withObject:nil afterDelay:.0001];
}
- (void)removeEdit
{
    tabBarController.moreNavigationController.navigationBar.topItem.rightBarButtonItem = nil;   
}
3 голосов
/ 12 августа 2009

@ m4rkk & @lan terrell, что код не работает.

Мне не удалось его получить, поэтому я просто отключил панель навигации.

tabBarController.moreNavigationController.navigationBar.hidden = YES;
2 голосов
/ 21 марта 2013

Если вы используете NavigationController в качестве первого ViewController и нажимаете одну из кнопок, чтобы войти в UITabBarController. Затем, кроме добавления кода ниже,

- (void)navigationController:(UINavigationController *)navigationController
        willShowViewController:(UIViewController *)viewController
        animated:(BOOL)animated 
{
    UINavigationBar *morenavbar = navigationController.navigationBar;
    UINavigationItem *morenavitem = morenavbar.topItem;
    /* We don't need Edit button in More screen. */
    morenavitem.rightBarButtonItem = nil;
}

вам нужно добавить это «утверждение if», чтобы кнопка редактирования не появлялась при первом нажатии на 5-й ViewControllers и выше.

if (self.selectedIndex >= 4) 
{
    self.customizableViewControllers = nil;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...