xcode / storyboard: no se puede arrastrar el botón de la barra a la barra de herramientas en la parte superior

99

Tengo un controlador de vista que es la vista detallada de una tabla. Cuando hace clic en la fila de la tabla, lo lleva a la vista de detalles. La vista de detalles está incrustada en un controlador de navegación de modo que hay un botón en la parte superior izquierda de la barra de navegación que lo envía de regreso a la tabla. Hasta aquí todo bien.

Ahora quiero agregar un botón de edición en el lado derecho de la barra de navegación para que pueda editar la vista de detalles. Mi plan es que esto agregará otro controlador de vista de manera modal que le permite editar los detalles del elemento. Cosas estándar.

Sin embargo, cuando intento arrastrar un elemento de botón de la barra de la lista de objetos a la barra de navegación, no se necesita. En cambio, cuando suelto el botón del mouse, deja el botón de la barra en el controlador de la barra de pestañas en la parte inferior. (Mi esquema de navegación incluye diferentes pestañas y para cada pestaña una tabla, vista detallada, etc.)

Cualquiera se ha topado con esto antes y puede sugerir qué estoy haciendo mal o algún tipo de solución para agregar el elemento del botón de la barra al lado derecho de la pantalla de navegación. ¿Tengo que agregarlo en el código?

Gracias por cualquier sugerencia.

usuario1904273
fuente
Consulta el siguiente tutorial brianflove.com/2012/10/01/…
casillas
Pude agregar el botón usando self.navigationItem.rightBarButtonItem = self.editButtonItem; y creó un nuevo editvc en el guión gráfico, sin embargo, no estoy seguro de cómo crear segue. No puedo hacerlo en el guión gráfico porque el botón de edición no está visible, así que supongo que tiene que estar en el código. intentará prepareforsegue?
user1904273
Si una de las respuestas le ayudó, debe aceptarla :)

Respuestas:

157

Tengo el mismo problema al usar Xcode6 y noté que UINavigationItem se agrega automáticamente para el primer ViewController que inserta en NavigationController, pero para los ViewControllers posteriores, tendrá que agregarlo manualmente de la siguiente manera:

  1. En la biblioteca de objetos, busque elemento de navegación y luego arrástrelo a su segundo ViewController en el guión gráfico.
  2. En la biblioteca de objetos, busque elemento del botón de la barra y luego arrástrelo al elemento de navegación que ha creado en el paso anterior.

Ahora tendrás tus botones de barra pegados en la parte superior de tu escena.

Actualización La solución todavía funciona con XCode 7, pero quería agregar una foto más descriptiva. En caso de que alguien no esté realmente familiarizado con los nombres estándar o técnicos mencionados anteriormente. Observe las flechas rojas a la derecha, se refieren al paso 1, paso 2 mencionado anteriormente. También observe la jerarquía de vistas en el rectángulo rojo de la izquierda. ingrese la descripción de la imagen aquí

Wael Showair
fuente
2
Sí, eso lo hizo por mí. Creo que esta es la respuesta correcta, XCode no parece agregar el elemento de navegación a ViewControllers posteriores.
Jeremy Chone
esto es correcto, pero la flecha roja en la imagen debe ir desde el elemento del botón de la barra en la biblioteca de objetos hasta el cuadro rojo izquierdo.
Malhal
Puede colocarlo en el lienzo así como lo indica la flecha roja o puede colocarlo en el esquema del documento como sugirió. No hace la diferencia
Wael Showair
Me alegro de haber encontrado esta respuesta porque funciona muy bien. Estoy desconcertado de que UINavigationItem no esté ya en el Storyboard. Obviamente está ahí en tiempo de ejecución, porque el código self.navigationItem.rightBarButtonItem = ...funcionará. Supongo que el UINavigationController en el primer VC lo instancia para todos los VC posteriores que se insertan en la pila. Sin embargo, al arrastrar manualmente uno allí, ¿por qué no terminas con 2 UINavigationItems uno encima del otro? ¿El que arrastró manualmente y el que ya está allí desde UINavigationController?
James Toomey
70

Truco desagradable:

  1. Cambia tu segue para empujar.
  2. Configura el contenido que necesitas
  3. Retroceder para mostrar

Entonces, el contenido será editable y tendrá un estilo no obsoleto para segue.

Baxter Lopez
fuente
Hombre, tan feo. Pero esto funciona UIBarButtonItemen un controlador de vista en Xcode 7.3 .
mikeho
Dios mío, todavía está funcionando en XCode 8.2.1. ¿Cuándo se arreglará? Probablemente nunca
Dima Rostopira
Esta es la única forma que encontré sin agregarlo por código.
Joshua
Oh Dios ... Gracias (y)
Nasir Khan
No puedo creer que este error siga aquí después de más de 2 años
Carioni
33

Es probable que el controlador de vista de su guión gráfico no tenga un archivo Navigation Item. Puede arrastrar uno de la biblioteca de objetos y soltarlo en su controlador de vista.

A continuación, podrá arrastrar y soltar los elementos del botón de la barra en el lado izquierdo o derecho de la barra de navegación.


fuente
1
esto funcionó, pero siento que esto solía hacerse automáticamente siempre y cuando tuvieras una transición de empuje a un controlador
aryaxt
Esta debería ser la respuesta correcta. El resto me parece un truco
MK Yung
23

Lo resolví. arrastre en 'Elemento de navegación' a su vista detallada. de lo que puede arrastrar en el elemento del botón de barra.

Jamal N. Ahmad
fuente
8

La forma en que solucioné este problema fue, en lugar de arrastrar un UINavigationController al Storyboard e intentar agregar UIBarButtonItems a eso, arrastré un UITableViewController y luego fui a

Editor-> Insertar en-> Controlador de navegación

Lo que dio el mismo resultado que antes, excepto que pude agregar UIBarButtonItems a ambos lados de la barra de navegación sin problemas.

tallen11
fuente
¡¡Deberías subir !!
Vin
5

En realidad, es un problema de xcode. Un truco que funcionó para mí es agregar el botón de la barra en VER ESTRUCTURA DE ARCHIVO A LA IZQUIERDA. Se instaló agregando directamente en la vista. Espero que te ayude. :)

Chetan Kumar
fuente
¡Esto funciona! Supongo que esta es la solución siempre que Apple solucione el error con Xcode 8.2
Arjun Kalidas
5

Creo que es un error. Tuve el mismo problema Solucioné este problema deshabilitando las clases de tamaño y luego habilitándolo.

Puede deshabilitar y habilitar las clases de tamaño en el documento del constructor de interfaces.

ingrese la descripción de la imagen aquí

Hongyang
fuente
4

También tuve este problema, cerrar y volver a abrir el proyecto funcionó para mí.

Hsm
fuente
3

Creo que es una peculiaridad de XCode. Tuve el mismo problema. Tuve que restablecer Xcode y cambiar la ubicación de las cosas en el guión gráfico para finalmente hacerlo funcionar. Está funcionando ahora.

manguito giratorio
fuente
3

Creo que esto es un error de Xcode. En Xcode 8, cambie el segueguión gráfico antes del controlador de vista de la barra de pestañas a todas sus opciones ( show detail, present...). Luego volvamos a show. Intente arrastrar los elementos del botón de la barra y modificar el mosaico. ¡Esto funciona para mi!

user2174595
fuente
1

¿Intentaste "limpiar" tu proyecto? Sé que eso me ayuda a veces (solo ve a "Producto"> "Limpiar"). O, alternativamente, elimine la barra de navegación y vuelva a intentarlo.

Si cree que es un error de programación, no dude en pasar su código. Estaría feliz de ayudar en todo lo que pueda. :)

JJ Yu
fuente
1

Debe restablecer xCode IDE. Cierre xCode y escriba los siguientes códigos en la terminal ... Funcionará.

rm -rf $HOME/Library/Application Support/Developer/Shared/Xcode
rm -rf $HOME/Library/Preferences/com.apple.dt.Xcode.*
rm -rf $HOME/Library/Saved\ Application\ State/com.apple.dt.Xcode.savedState
rm -rf $HOME/Library/Developer/Xcode
Yusuf Kıldan
fuente
1

Mismo problema. Tenía un controlador de vista de tabla dentro de un controlador de navegación y muchos ViewControllers seguían más abajo en la cadena. Se estaba creando un 'Elemento de navegación' automáticamente para el PRIMER controlador de vista raíz y pude agregar un 'Elemento de botón de barra' a esto sin ningún problema. A través del Storyboard, arrastre y suelte. Pero eso es todo. En el siguiente controlador de vista de tabla y otros controladores de vista, a pesar de que estaban dentro del controlador de navegación inicial (apareció el botón de retroceso generado automáticamente), el guión gráfico nunca me dejaba agregar un elemento de botón de barra.

La solución de Wael Showair no funcionó para mí. Los elementos del botón de la barra no aparecerían.

Lo resolví programáticamente al final (Swift 2.0):

var testButton = UIBarButtonItem(title: "Test Button", style .Plain, target: self, action: "testButtonMethod")
self.tabBarController?.navigationItem.rightBarButtonItem = testButton

No se necesita ningún elemento de navegación adicional o elemento de botón de barra.

Elliott Davies
fuente
1

Yo también estaba enfrentando el mismo problema Pude solucionar este problema seleccionando la opción del controlador de vista raíz y luego en la matriz simulada cambié la opción de la barra superior a Barra de navegación opaca y pude agregar el elemento en la parte superior de la barra de navegación. esta respuesta ayudará a alguien.

reetu
fuente
1

Tuve el mismo problema en xcode 8. Tuve que simplemente cerrar xcode y volver a abrir el proyecto y luego pude agregar el botón de barra al controlador raíz sin ningún problema.

SGM
fuente
1

Para XCode 8

Aquí hay muchas respuestas. Probé algunos de ellos pero no pude hacerlo. Entonces encontré mi solución, solo seleccione la suya ViewController, vaya a la sección Inspector de atributos y cambie la barra superior a Barra de navegación opaca y Boom. Verá la barra de navegación en su guión gráfico. Puede cambiar el título o agregar algún elemento. Si no desea mantener Opaque , puede cambiar el estilo a Inferido .

ingrese la descripción de la imagen aquí

emresancaktar
fuente
1

En Xcode 10, acabo de cambiar el tipo de segue que va a este nuevo controlador de vista a 'Push (obsoleto)', agregué el elemento de navegación tal como estaba permitido después de que hice este cambio. Si vuelve al tipo de segue que deseaba originalmente, el elemento de navegación permanecerá.

Mark Lyons
fuente
0

En lugar de arrastrar el "Elemento del botón de la barra" al "Controlador de navegación", arrástrelo al "Controlador de vista detallada". A medida que incrusta la vista de detalles en la "Vista de navegación", el "Elemento de navegación" se agregará al "Controlador de vista de detalles". Si arrastra el "Elemento del botón de la barra" al lado derecho del elemento de navegación, el elemento se incluirá en los "Elementos del botón de la barra derecha".

Nancy
fuente
0

como dijo Mark Lyons, utilicé la misma solución.

  • usado push segue primero
  • agregó el elemento de la barra
  • volver para mostrar segue
  • hecho
A_Mo
fuente
0

En Xcode 11, puede arrastrar un botón a la barra de navegación para crear su botón de barra.

Sala
fuente