¿Dejando inputAccessoryView visible después de que el teclado se descarta iOS8?
uikeyboard (2)
Está agregando el someView
a múltiples superViews, lo que conduce a jerarquías inconsistentes (que le está diciendo).
Cuando el teclado se activa, llama al método inputAccessoryView()
para ver si necesita pegar algo en la parte superior del teclado y lo agrega a su propia supervista. Pero ya lo ha agregado a la vista a través de su guión gráfico.
Ahora hay 2 formas en que puedes resolver esto:
Haz un
.xib
con tu vista y devuelve ese en tuinputAccessoryView()
, sin agregarlo a ninguna supervista (el teclado lo hará.O
NSLayoutConstraint
completamente en código usandoNSLayoutConstraint
.
Puede agregar el siguiente código a su ViewController que persistirá en la vista incluso cuando el teclado esté oculto.
override func canBecomeFirstResponder() -> Bool {
return true
}
Mire este repo de GitHub para un ejemplo.
Quiero hacer un comportamiento como la aplicación de mensajería. He estado buscando Stack Overflow para encontrar soluciones para esto, y de hecho, hay muchas:
Dejando inputAccessoryView visible después de que el teclado se descarta
Este fue el que encontré. Pero parece que las cosas son un poco diferentes en iOS8
. Si hago lo mismo en la nueva iOS8 sdk
, obtengo un error:
''UIViewControllerHierarchyInconsistency'', reason: ''child view controller:<UICompatibilityInputViewController: 0x7fdcb3441b10> should have parent view controller:<ViewController: 0x7fdcb3b1e9f0> but requested parent is:<UIInputWindowController: 0x7fdcb684c000>''
Para probar esto más hice un proyecto de muestra, solo un controlador con vista en la parte inferior:
Outlet está conectado a la vista inferior, que solo tiene UITextField
en él. ¿Me estoy perdiendo algo y cómo obtengo el comportamiento deseado?
iOS8 tiene un ciclo de retención con la entrada AccessorView. Aquí hay una buena publicación que parece tener una buena solución:
http://derpturkey.com/uitextfield-docked-like-ios-messenger/