2011-07-29 17 views
5

Tengo un inputAccessoryView para una configuración de UITextField, que se carga desde un XIB cuando es necesario (de la misma manera que el ejemplo de KeyboardAccessory de Apple).No me puedo entender: (vacío) playInputClick;

Estoy tratando de hacer que los botones hagan clic cuando me presionen con la función playInputClick, pero no sé cómo. El Apple documentation dice que necesito agregar agregar un método de delegado a la vista, pero la vista se creó exclusivamente en el constructor de interfaz, así que no veo cómo puedo hacer esto.

¿Alguien sabe cómo hacer esto? Parece que no hay un código de ejemplo de este método en cualquier lugar de Internet.

+0

necesita cambiar la clase para que sea una subclase de lo que es actualmente e implementar el protocolo en la clase personalizada – bshirley

Respuesta

-2

Debe implementar una clase de controlador de vista y en el constructor de interfaz asignar el propietario de los archivos como esta clase. Conecte la vista del controlador de vista a su vista.

Una vez que haya hecho eso, puede implementar el delegado en el controlador de vista. Es bastante simple y directo. Básicamente, su vista será miembro de una clase de controlador de vista.

+0

de los documentos apple: 'Implemente este protocolo en su subclase personalizada de UIView'. Entonces, ¿eso está mal, en realidad está destinado a ser implementado en una subclase UIViewController? –

+0

También puede crear una clase personalizada derivada de una uiview. Básicamente es lo mismo. –

+1

OK, lo he intentado. Creé una clase CustomKeyboardController que implementa el protocolo y el método de delegado, inputAccessoryView se establece en customKeyboardController.view. Cuando se presiona un botón, todavía no hay sonido. Sé que el método [[UIDevice currentDevice] playInputClick] se está ejecutando ya que tengo una declaración NSLog al lado de la cual veo salida de depuración. Es solo que no hay sonido. –

4

He estado teniendo el mismo problema y finalmente lo descubrí.

Si implementa el protocolo en un UIViewController, no funciona. Debe implementarse en una subclase de UIView.

Para que funcione, creé una vista en el constructor de interfaces con un controlador de vista. Luego agregué otra clase que es una subclase de UIView. Esta clase implementa el protocolo UIInputViewAudioFeedback. Luego, en el generador de interfaz, fui al inspector de identidad de mi vista y cambié la clase a mi subclase UIView que implementa el protocolo UIInputViewAudioFeedback. Y el sonido de clic del teclado ahora está funcionando.

Mi controlador de vista sigue llamando al [[UIDevice currentDevice] playInputClick], todo lo que hice fue mover el código para el protocolo UIInputViewAudioFeedback a una Subclase UIView y establecer mi clase de vistas en mi subclase UIView.

+0

Gracias por la respuesta más útil. Entonces, básicamente, el método es inútil para agregar clics a botones en vistas estándar. Todo tiene que ser subclasificado. –

+0

@YiminRong parece que cambió la vista del controlador de vista con el propio subclasificado. – dimpiax

+0

Proporcione mi experiencia de hacer "Select collectionViewCell to playInputClick": implementar el protocolo UIInputViewAudioFeedback en la subclase UICollectionViewCell no funcionaría. Tiene que implementarse en la subclase UICollectionView. – denkeni

4

Suponiendo que está tratando de hacer esto en un inputAccessoryView:

En el archivo .h, indican que implemente la UIInputViewAudioFeedback

@interface YourAcessoryView : UIView <UIInputViewAudioFeedback> 

En el archivo .m, agrega este método para satisfacer el protocolo

- (BOOL)enableInputClicksWhenVisible { 
    return YES; 
} 

Cuando se presiona un botón, haga algo como:

- (void)buttonPressed:(UIButton*)sender 
{ 
    [[UIDevice currentDevice] playInputClick]; 
    // do more stuff 
} 
Cuestiones relacionadas