2011-07-25 20 views
7

Probé el siguiente código, en un intento de mostrar la vista personalizada sobre el controlador de la barra de pestañas (que tiene un controlador de navegación dentro de todas sus pestañas).¿Agregar vista personalizada arriba de la barra de pestañas controlador/controlador de navegación?

El problema es que se superpone en la parte superior de la barra de navegación, y quiero que la barra de navegación se mueva hacia abajo.

Intenté configurar el marco del controlador de la barra de pestañas, pero eso no lo movió en absoluto.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    // Override point for customization after application launch. 
    // Add the tab bar controller's current view as a subview of the window 
    //self.tabBarController.view.frame = CGRectMake(0, 62, 320, 320); 
    self.window.rootViewController = self.tabBarController; 

    [self.window makeKeyAndVisible]; 

    // setting up the header view 
    self.headerView = [[HeaderView alloc] initWithFrame:CGRectMake(0, 20, 320, 42)]; 
    [self.window addSubview:self.headerView]; 

    // setting up facebook stuff 
    AgentSingleton *agentSingleton = [AgentSingleton sharedSingleton]; 
    agentSingleton.facebook = [[Facebook alloc] initWithAppId:APP_ID]; 

    return YES; 
} 

¿Alguna idea?

Respuesta

7

No hay realmente ninguna buena manera de hacer esto. Las diversas subvistas de UINavigationController y UITabBarController son privadas, y tratar de meterse con ellas es probable que no funcionen correctamente. Y Apple no nos da las herramientas para crear controladores de vistas "contenedor", por lo que no puede incrustar fácilmente UINavigationController/UITabBarController dentro de otro controlador de vista o recrear UINavigationController/UITabBarController usted mismo.

Su mejor opción es, probablemente, seguir adelante y tratar de crear su propio controlador de vista "contenedor", y tratar con algunas cosas que no funcionan bien. En particular, el parentViewController del controlador de vista contenido devolverá nulo, y por lo tanto varias otras cosas en el controlador de vista contenida o sus subcontroladores se romperán (por ejemplo, la propiedad interfaceOrientation será incorrecta, presentModalViewController:animated: podría no funcionar bien). Otras cosas pueden estar rotas también.

O podría esperar hasta que alguna versión futura de iOS realmente tenga soporte para nosotros para crear controladores de vista de contenedor (si es que lo tiene), y luego solo soporte esa versión y hasta.

0

¿Te refieres a arriba como en vertical por encima del resto de los contenidos?

¿O superior como en estar encima del resto del contenido?

There's presentModalViewController: animated: pero dudo que eso es lo que quieres?

+0

Verticalmente por encima del resto del contenido. – xil3

+0

Lo tengo colocado en la parte superior, pero en este momento está cubriendo el controlador de navegación. Necesito presionar hacia abajo el controlador de la barra de pestañas de alguna manera ... – xil3

+0

Use un modalViewController en el que la vista de fondo es la vista superior en el controlador de vista actual (algo así como view.superview.superview.superview hasta su nada) – dwbrito

7

Se podría addSubview simple de ventana:

[self.view.window addSubview:myView]; 
+0

Para mí, auto .view.window era nulo, por lo que agregar una subvista no tiene ningún efecto. – Lewis42

+0

@ Lewis42 No dice que este sea el enfoque correcto, pero dentro de la propiedad de la ventana del método viewDidLoad siempre será nulo. Esto debe hacerse dentro del método viewDidAppear. –

0

que no puedo comentar lo que va a escribir esto aquí para cualquier otra persona que viene a través de esta página. La respuesta de Borut que fue votada fue en realidad la respuesta más fácil y más correcta.

Simplemente no le proporcionó las instrucciones correctas. Necesita agregar la vista personalizada a la Ventana para su aplicación que está declarada en su AppDelegate (en Mono esto sería AppDelegate.Window.Add (myView), no en la Ventana de la Vista actual que es nula (p. Ej. This.View) .Window).

Esto funciona bien en Xamarin/Mono y no puedo ver por qué no sería el mismo para Obj-C en el código correcto.

20

Añadir el fin de la propia tabBarController Ver :

[self.tabBarController.view addSubview:yourView]; 
0

Usted puede hacer algo así:

if let indeedTabBarController = self.tabBarController { 

    let buttonHeight: CGFloat = 49 // height of tab bar 
    let buttonWidth = UIScreen.main.bounds.width/3 // in case if you have 3 tabs 
    let frame = CGRect(x: 0, y: UIScreen.main.bounds.height - buttonHeight, width: buttonWidth, height: buttonHeight) 
    let button = UIButton(frame: frame) 
    button.addTarget(self, action: #selector(self.someAction), for: .touchUpInside) 

    indeedTabBarController.view.addSubview(button) 
} 
Cuestiones relacionadas