Как и многие ответы, используйте JSTL или создайте свои собственные теги. Здесь является хорошим объяснением создания пользовательских тегов
Станьте делегатом 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 появляется не после создания контроллера, а перед отображением представления, и мы должны сидеть молча до этого момента, а затем, когда контроллер будет отображать экран, мы выбьем кнопку, чтобы у него не будет возможности создать его снова. :)
Я испробовал большинство из этих решений и столкнулся с проблемой, из-за которой кнопка редактирования возвращалась при повороте устройства. Вращение вернулось бы к первому контроллеру представления, затем, когда я вернулся к большему контроллеру представления, там была кнопка редактирования. Лучшее решение состояло в том, чтобы стать 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
}
}
}
Ответ Алекса Н. работает, но я бы хотел немного изменить. Когда мы помещаем другие представления в этот контроллер представления «Больше», мы не хотим этого делать.
iPhone 6 Plus позволяет использовать больше кнопок на панели вкладок в альбомном режиме, чем в портретном. К сожалению, это означает, что он сбрасывает массив customizableViewControllers всякий раз, когда устройство поворачивается, и ни один из ответов здесь не помог мне.
У меня уже был свой собственный подкласс UITabBarController, и переопределение методов установки и получения для customizableViewControllers было единственным надежным способом удаления кнопки «Редактировать» из экрана «Дополнительно»:
- (NSArray *)customizableViewControllers
{
return nil;
}
- (void)setCustomizableViewControllers:(NSArray*)controllers
{
//do nothing
}
Я не знаю про iOS4, но имеет значение, если вы поместите код в viewDidLoad
против viewWillAppear
.
То есть, это будет работать.
- (void)viewWillAppear:(BOOL)animated
{
self.customizableViewControllers = nil;
}
Просто добавьте строку кода в метод жизненного цикла, т.е. приложение завершило запуск:
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
tabBarController.customizableViewControllers=nil;
}
Мне удалось заставить это работать со следующим кодом. Я создал 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
tabBarController .customizableViewControllers = nil;
customizableViewControllers
- массив; установите пустой массив, чтобы отключить все редактирование.
tabBarController.customizableViewControllers = [NSArray arrayWithObjects:nil];
@ m4rkk & @lan terrell этот код не работает.
Мне не удалось его получить, поэтому я просто полностью отключил панель навигации.
tabBarController.moreNavigationController.navigationBar.hidden = YES;
Этого можно добиться подобным образом. Это не самое элегантное решение, но оно работает ™.
// 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;
}