Pregunta

Tengo una subclase de un UIView (MyView) que tiene algunos UITextField como subvistas.MyView implementa el protocolo UITextFieldDelegate para ser notificado cuando se hace clic en los campos de texto.Esto estaba funcionando bien.Ahora necesito colocar los campos de texto en una especie de "contenedor" para poder entrar y salir de este contenedor (y todos sus elementos secundarios) con una animación UIView.Así que creé una UIView (MySubview), la convertí en una subvista de MyView y coloqué todos los campos de texto dentro de ella.La animación funciona bien pero ya no se llama al UITextFieldDelegate.Creo que es porque los campos de texto ya no son hijos directos de MyView. ¿Hay otras formas de lidiar con esto?

ACTUALIZAR

Hice una versión pequeña de mi código, tal vez esto ayude a encontrar el problema:

@interface MyView : UIView <UITextFieldDelegate>


@implementation MyView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        // This is MySubview:
        UIView *tempLabelsContainer = [[UIView alloc] initWithFrame:self.bounds];
        [tempLabelsContainer setUserInteractionEnabled:YES];
        [self addSubview:tempLabelsContainer];
        self.labelsContainer = tempLabelsContainer;
        [tempLabelsContainer release];

        UITextField *aTextField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
        [aTextField setBackgroundColor:[UIColor clearColor]];
        [aTextField setText:@"Some text"];
        [aTextField setTag:1];
        [aTextField setDelegate:self];
        [self.labelsContainer addSubview:aTextField];
        [aTextField release];

        // More labels are being added
    }

    return self;
}

#pragma mark - UITextFieldDelegate methods

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    // This is not being called
    NSLog(@"TextField with the tag: %d should be edited", [textField tag]);    

    return NO;
}
¿Fue útil?

Solución 2

Responderé mi propia pregunta en caso de que alguien tenga el mismo problema; sin embargo, es difícil imaginar a alguien cometiendo un error tan tonto:

Estaba configurando el marco del contenedor de etiquetas en self.bounds.¡Pero MyViewController estaba creando MyView con un marco de CGRectZero!Hice ese cambio para admitir la animación al mismo tiempo que agregué el contenedor.Por lo tanto, pensé que el problema tenía que ver con la jerarquía de vistas.¡¡¡Me avergüenza!!!

De todos modos, gracias a todos los ayudantes, en especial a Madhumal Gunetileke quien, con su respuesta, me hizo mirar en una dirección diferente.

Otros consejos

Bien, intenté escribir tu código y me funcionó.Aquí hay algunos elementos que puede intentar cambiar:

  • La razón por la que no puede editar su textField es porque está devolviendo NO al método textFieldShouldBeginEditing.Cambie esto a SÍ.
  • Intente colocar (si es posible) su campo de texto un poco más abajo de lo que ha proporcionado.Además, 20px es de todos modos muy pequeño para un campo de texto adecuado, haz que sea al menos 40px.Un campo de texto de 20px posicionado en 0,0 puede estar oculto por completo si la barra de estado está encendida en el teléfono.
  • Establezca un borderStyle para su textField.Hasta donde yo sé, esto es importante para que un campo de texto se muestre e interactúe bien.(por ejemplo, textField.borderStyle= UITextBorderStyleRoundRect)

¡Crucemos los dedos!:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top