OK, esta es una extraña. He estado golpeando mi cabeza contra eso por una hora tratando de depurar.UIBarButtonItem con vista personalizada no se muestra después de la primera vista
He creado un UIBarButtonItem con una vista personalizada, que es un UIButton con una imagen asignada. El código es el siguiente
UIButton *btnAdd = [[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 28, 28)] autorelease];
[btnAdd setImage:[UIImage imageNamed:@"btn_add"] forState:UIControlStateNormal];
[btnAdd addTarget:self
action:@selector(addBox)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithCustomView:btnAdd];
self.navigationItem.rightBarButtonItem = add;
Se encuentra en mi método - (id)initWithNibName:
en una UIViewController extendida
en el primer aspecto de la UIViewController, el botón aparece como normal, y funciona bien. SIN EMBARGO, si presiono a otro controlador de vista y luego regreso, el botón es INVISIBLE.
Incluso cuando es invisible, el botón sigue funcionando. Puedo hacer clic en él, y se comporta normalmente. Sé de hecho que es el UIButton original allí, ya que he hecho rastros en su dirección de memoria y otras propiedades ... su propiedad oculta es FALSA, y su propiedad alfa está configurada en 1.00f
Pensé al principio esto fue quizás un problema de profundidad, pero tengo un código que empuja mi fondo UINavigationBar personalizado hacia atrás en cada ciclo de cuadro, y nada cambia. ver Boletín
Es casi como si la imagen es la liberación o algo detrás de las escenas, pero el puntero en la que también está bien ...
supongo que esto es un capricho dibujo raro que sólo necesito mono con, pero es un problema muy difícil para google.
Cualquier sugerencia sería apreciada.
ACTUALIZACIÓN
Resulta que este es un problema de profundidad. Estoy dibujando un fondo personalizado en drawRect :, y ese código SÍ empuja el fondo personalizado a la parte posterior de la pila de vistas, SIN EMBARGO, este método solo se llama una vez por los métodos de marco privados ... por lo tanto, cuando la barra se vuelve a dibujar después la primera vista, el fondo no se ve obligado a retroceder y por alguna estúpida razón, decide volver a dibujar los botones detrás de él.
Así que en este momento estoy tratando de ver cómo puedo forzar que el fondo se repliegue cada vez que se renderiza UINavigationBar.
Es mejor agregar botones a la barra de navegación en 'viewDidLoad'. Prueba esto primero. Y trate de establecer esa imagen en todos los estados UIButton. – Nekto
Estoy muy contento de haber encontrado esto, estoy pasando por exactamente lo mismo. Las soluciones a continuación no me parecen adecuadas, y son más como pirateos. Pero si te has dado cuenta de esto, me encantaría ver lo que hiciste. – n00shie