2010-11-03 8 views
5

¿Hay alguna manera de hacer esto?iOS: ¿es posible forzar a un objeto de la subclase UILabel a convertirse en el primer respondedor?

He intentado poner lo siguiente en la subclase:

- (BOOL)canBecomeFirstResponder 
{ 
    return YES; 
} 

Pero cuando envié el objeto becomeFirstResponder un mensaje, todavía no me convertí en el primer nivel de respuesta.

+0

UILabel convertirse en un primer nivel de respuesta? ¿Qué quieres que responda? – kennytm

+3

Hereda de UIResponder por lo que tiene la capacidad. – Ben

+0

Estoy usando la biblioteca de alguien que hace cosas cuando un objeto con ciertas propiedades se convierte en el primer respondedor. También envía mensajes al primer respondedor. Sucede que quiero atar todo esto a mi etiqueta. –

Respuesta

0

No tengo una respuesta definitiva, solo algunas (quizás locas) ideas: ¿También ha intentado anular becomeFirstResponder para devolver YES? ¿Tiene userInteractionEnabled también establecido en YES?

De lo contrario, hacen que sea una costumbre UIButton en lugar de un encargo UILabel ...

1

Sí, es posible. Usted debe:

  1. Anulación becomeFirstResponder para volver YES.

  2. Conjunto userInteractionEnabled a YES.

  3. Agregue UITapGestureRecognizer para manejar los grifos.

  4. Llame al becomeFirstResponder desde el controlador de tap.

Usted puede incluso anular inputView para conseguir un control de entrada en la parte inferior de la pantalla. De lo contrario, no habrá nada.

+0

¿Qué debería devolver en 'inputView' para ver el teclado en la pantalla? – derpoliuk

+0

@derpoliuk gracias por el comentario. Mi error no fue verificar que la clase UIKeyboard sea una API privada. –

+0

Entonces, ¿no hay forma de obtener el teclado en la pantalla después de que 'UILabel' se convierta en el primer respondedor? Intento imitar el comportamiento de Viber o Telegram, cuando el teclado está en la pantalla y presionar prolongadamente el mensaje de chat muestra 'UIMenuController'. – derpoliuk

0

Esto funcionó para mí.

UILabel Subclase y anular estos métodos:

- (BOOL)canBecomeFirstResponder { 
     return YES; 
    } 

    - (BOOL)canPerformAction:(SEL)action 
        withSender:(id)sender 
    { 
     return (action == @selector(copy:)); 
    } 

    - (void)copy:(id)sender { 
     [[UIPasteboard generalPasteboard] setString:self.text]; 
    } 

Añadir gesto a su marcador para detectar grifo.

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(LongPressDetected:)]; 
[_messageLabel addGestureRecognizer:longPress]; 

evento de gesto de la manija, presentan un UIMenuController con el marco deseado:

- (void)LongPressDetected:(UILongPressGestureRecognizer*)gesture { 

     [_messageLabel becomeFirstResponder]; 
     [[UIMenuController sharedMenuController] setTargetRect:_messageLabel.bounds inView:_messageLabel]; 
     [[UIMenuController sharedMenuController] setMenuVisible:YES animated:NO]; 
    } 
Cuestiones relacionadas