Как отключить кнопку редактирования, которая появляется в большем количестве раздела UITabBarController?

Как и многие ответы, используйте JSTL или создайте свои собственные теги. Здесь является хорошим объяснением создания пользовательских тегов

25
задан Panagiotis Korros 5 May 2009 в 14:15
поделиться

11 ответов

Станьте делегатом 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;
}

Теперь он не появится. Ключевым моментом, который следует учитывать, является то, что кнопка Edit появляется не после создания контроллера, а перед отображением представления, и мы должны сидеть молча до этого момента, а затем, когда контроллер будет отображать экран, мы выбьем кнопку, чтобы у него не будет возможности создать его снова. :)

59
ответ дан 28 November 2019 в 17:33
поделиться

Я испробовал большинство из этих решений и столкнулся с проблемой, из-за которой кнопка редактирования возвращалась при повороте устройства. Вращение вернулось бы к первому контроллеру представления, затем, когда я вернулся к большему контроллеру представления, там была кнопка редактирования. Лучшее решение состояло в том, чтобы стать UITabBarControllerDelegate и установить правую кнопку на ноль в любое время, когда больше контроллера представления стало выбранным контроллером представления. Это работает для iOS 11-12.

final class DashboardController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        delegate = self
    }
}

extension DashboardController: UITabBarControllerDelegate {
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        if viewController == moreNavigationController {
            moreNavigationController.navigationBar.topItem?.rightBarButtonItem = nil
        }
    }
}
0
ответ дан Chris 15 October 2019 в 14:44
поделиться

Ответ Алекса Н. работает, но я бы хотел немного изменить. Когда мы помещаем другие представления в этот контроллер представления «Больше», мы не хотим этого делать.

1
ответ дан Edwin Otten 15 October 2019 в 14:44
поделиться

iPhone 6 Plus позволяет использовать больше кнопок на панели вкладок в альбомном режиме, чем в портретном. К сожалению, это означает, что он сбрасывает массив customizableViewControllers всякий раз, когда устройство поворачивается, и ни один из ответов здесь не помог мне.

У меня уже был свой собственный подкласс UITabBarController, и переопределение методов установки и получения для customizableViewControllers было единственным надежным способом удаления кнопки «Редактировать» из экрана «Дополнительно»:

- (NSArray *)customizableViewControllers
{
    return nil;
}

- (void)setCustomizableViewControllers:(NSArray*)controllers
{
    //do nothing
}
1
ответ дан Anthony F 15 October 2019 в 14:44
поделиться

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

То есть, это будет работать.

- (void)viewWillAppear:(BOOL)animated
{
self.customizableViewControllers = nil;
}
3
ответ дан kamalesh kumar yadav 15 October 2019 в 14:44
поделиться

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

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

}
3
ответ дан Eshwar Chaitanya 15 October 2019 в 14:44
поделиться

Мне удалось заставить это работать со следующим кодом. Я создал 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
4
ответ дан Dave Clemmer 15 October 2019 в 14:44
поделиться
tabBarController .customizableViewControllers = nil;
12
ответ дан D_D 15 October 2019 в 14:44
поделиться

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

tabBarController.customizableViewControllers = [NSArray arrayWithObjects:nil];
53
ответ дан 28 November 2019 в 17:33
поделиться

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

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

tabBarController.moreNavigationController.navigationBar.hidden = YES;
3
ответ дан 28 November 2019 в 17:33
поделиться

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

// 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
ответ дан 28 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: