iphone - sacar - no puedo salir del acceso guiado
¿Cómo deshabilitar el botón de edición que aparece en la sección más de un UITabBarController? (16)
@ m4rkk & @lan terrell ese código no funciona.
No pude obtenerlo, así que simplemente deshabilité la barra de navegación por completo.
tabBarController.moreNavigationController.navigationBar.hidden = YES;
En mi aplicación (basada en la plantilla XCode de la barra de pestañas) utilizo un UITabBarController para mostrar una lista de las diferentes secciones de la aplicación a las que el usuario puede acceder.
De forma predeterminada, el UITabBarController muestra un botón ''Más'' en la barra de pestañas cuando hay más de 5 elementos. Además, le permite al usuario seleccionar los elementos que desea que estén visibles en la barra de pestañas.
Actualmente no puedo implementar guardar y cargar el estado del controlador de la barra de pestañas, por lo que quiero desactivar el botón ''Editar''.
¿Hay alguna manera de deshabilitar / ocultar el botón de la barra ''Editar'' que aparece en el controlador de navegación ''Más'' de UITabBarController?
Lo intenté:
tabBarController.moreNavigationController.navigationBar.topItem.rightBarButtonItem = nil;
y
tabBarController.moreNavigationController.navigationBar.topItem.rightBarButtonItem.enabled = NO;
pero no parecen funcionar.
Conviértase en un delegado de moreNavigationController
(es un UINavigationController) y agregue esto:
- (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;
}
Ahora no aparecerá. La clave a considerar es que el botón Editar aparece no después de la creación del controlador, sino antes de mostrar la vista, y debemos sentarnos en silencio hasta ese momento y luego, cuando el controlador vaya a mostrar la pantalla, eliminaremos el botón para que No tendrá la oportunidad de crearlo de nuevo. :)
En los que trabajan con Xcode mayor que 4.0 (estoy trabajando en Xcode 4.2 para Snow Leopard):
Compruebe en primer lugar dónde cambia la matriz de vistas la última vez. Creo que no importa en qué método configures tu personalizableView-Array en nil. La descripción de las manzanas dice:
Importante: Agregar o quitar controladores de vista en la interfaz de la barra de pestañas también restablece la matriz de controladores de vista personalizables al valor predeterminado, lo que permite que todos los controladores de vista se personalicen nuevamente. Por lo tanto, si realiza modificaciones a la propiedad viewControllers (ya sea directamente o llamando a setViewControllers: animated: method) y aún desea limitar los controladores de vista personalizables, también debe actualizar la matriz de objetos en la propiedad personalizableViewControllers.
Funcionó para mí, así que por favor inténtalo. Encontré esta descripción aquí: enlace a la descripción en developer.apple.com en el capítulo "Cómo evitar la personalización de pestañas".
Esta es una adición tardía, pero creo que es una contribución útil. La respuesta de Aleks N puede crear una situación en la que se elimine el derechoBarButtonItem para cada controlador de vista en la "Más pestaña" (como mencionó Bao Lei). Me gustaría recomendar el uso del Código de Bao Lei, pero con la diferencia de implementarlo con el método delegado didShowViewController .
Como su código existe ahora, los usuarios que tocan la pestaña "Más" para volver a la tabla UIMoreViewController base pueden hacer que la propiedad de RightBarButtonItem a otros viewControllers se establezca en nil.
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
if (navigationController.viewControllers.count == 1)
{
UINavigationBar *morenavbar = navigationController.navigationBar;
UINavigationItem *morenavitem = morenavbar.topItem;
/* We don''t need Edit button in More screen. */
morenavitem.rightBarButtonItem = nil;
}
}
La distinción es pequeña, pero me llevó mucho tiempo encontrar este error.
Esto se puede lograr como tal. No es la solución más elegante, pero funciona ™.
// 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;
}
La única solución que me funcionó.
self.moreNavigationController.navigationBar.topItem?.rightBarButtonItem?.title = ""
self.moreNavigationController.navigationBar.topItem?.rightBarButtonItem?.isEnabled = false
La respuesta de Aleks N funciona, pero me gustaría modificar un poco
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
if (navigationController.viewControllers.count == 1)
{
UINavigationBar *morenavbar = navigationController.navigationBar;
UINavigationItem *morenavitem = morenavbar.topItem;
/* We don''t need Edit button in More screen. */
morenavitem.rightBarButtonItem = nil;
}
}
Dado que este método de delegado se invoca cada vez que un controlador de vista se empuja o aparece en esta pila de vistas. Cuando presionamos otras vistas en este controlador de vista "Más", no queremos hacer esto.
Lo he intentado y he aquí un ejemplo.
En 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;
}
para eliminar el botón "Editar"
- (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;
}
En tu AppDelegate.h
@interface TestAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate, UINavigationControllerDelegate>
corrígeme si me equivoco.
No sé sobre iOS4, pero importa si pones el código en viewDidLoad
vs viewWillAppear
.
Es decir, esto funcionará.
- (void)viewWillAppear:(BOOL)animated
{
self.customizableViewControllers = nil;
}
Probé la mayoría de estas soluciones y me encontré con un problema en el que el botón de edición volvería al girar el dispositivo. La rotación se restablecería al primer controlador de vista, luego, cuando regresé al controlador de más vista, el botón de edición estaba allí. La mejor solución fue convertirse en el UITabBarControllerDelegate
y establecer el botón de la barra derecha en cero en cualquier momento, UITabBarControllerDelegate
más controlador de vista se convirtió en el controlador de vista seleccionado. Esto está funcionando para 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 } } }
Pude hacer que esto funcionara con el siguiente código. CustomTabViewController
un CustomTabViewController
y luego modifiqué la identidad de clase de mi controlador de la barra de pestañas en Interface Builder para usar esta clase personalizada. Aquí está el código que usa (contenido de los archivos .h y .m). La clave es establecer la propiedad en nil, lo que hace que no se muestre el botón Editar. Para obtener más información, consulte: http://developer.apple.com/library/ios/documentation/uikit/reference/UITabBarController_Class/Reference/Reference.html#//apple_ref/occ/instp/UITabBarController/customizableViewControllers "Si la matriz está vacía o el valor de esta propiedad es nulo, la barra de pestañas no permite reorganizar ningún elemento ".
#import <UIKit/UIKit.h>
@interface CustomTabBarController : UITabBarController {
}
@end
#import "CustomTabBarController.h"
@implementation CustomTabBarController
- (void)viewDidLoad
{
self.customizableViewControllers = nil;
[super viewDidLoad];
}
@end
Si usa NavigationController como su primer ViewController y presiona uno de los botones para ingresar a UITabBarController. Luego, aparte de agregar el siguiente código,
- (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;
}
debe agregar esta "declaración if" para evitar que el botón de edición se muestre cuando haga clic por primera vez en el 5º ViewControllers y más arriba.
if (self.selectedIndex >= 4)
{
self.customizableViewControllers = nil;
}
Simplemente agregue una línea de código en el método del ciclo de vida, es decir, la aplicación terminó de iniciarse:
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
tabBarController.customizableViewControllers=nil;
}
Un iPhone 6 Plus permitirá más botones en la barra de pestañas en modo horizontal que en vertical. Desafortunadamente, esto significa que restablece la matriz personalizableViewControllers cada vez que se gira el dispositivo, y ninguna de las respuestas aquí funcionó para mí.
Ya contaba con mi propia subclase UITabBarController y la anulación de los métodos de establecimiento y obtención para los controladores de vista personalizables era la única forma confiable de eliminar el botón Editar de la pantalla Más:
- (NSArray *)customizableViewControllers
{
return nil;
}
- (void)setCustomizableViewControllers:(NSArray*)controllers
{
//do nothing
}
customizableViewControllers
es una matriz; configúrelo en la matriz vacía para deshabilitar toda la edición.
tabBarController.customizableViewControllers = [NSArray arrayWithObjects:nil];
tabBarController .customizableViewControllers = nil;