Pergunta

Eu tenho uma subclasse de um UIView (MyView) que possui algum UITextField como subvisualizações.MyView implementa o protocolo UITextFieldDelegate para ser notificado quando os campos de texto forem clicados.Isso estava funcionando bem.Agora preciso colocar os campos de texto em uma espécie de "contêiner" para poder entrar e sair gradualmente desse contêiner (e de todos os seus filhos) com uma animação UIView.Então criei um UIView (MySubview), tornei-o uma subview de MyView e coloquei todos os campos de texto dentro dela.A animação funciona bem, mas o UITextFieldDelegate não é mais chamado.Acho que é porque os textfields não são mais filhos diretos de MyView. Existe alguma outra maneira de lidar com isso?

ATUALIZAÇÃO

Fiz uma pequena versão do meu código, talvez isso ajude a encontrar o 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;
}
Foi útil?

Solução 2

Responderei minha própria pergunta caso alguém tenha o mesmo problema - embora seja difícil imaginar alguém cometendo um erro tão bobo:

Eu estava configurando a moldura do contêiner de rótulos para self.bounds.Mas o MyViewController estava criando MyView com um frame de CGRectZero!Fiz essa alteração para oferecer suporte à animação ao mesmo tempo em que adicionei o contêiner.Portanto, pensei que o problema tinha a ver com a hierarquia de visualizações.Que vergonha!!!

De qualquer forma, obrigado a todos os ajudantes, especialmente a Madhumal Gunetileke que, com sua resposta, me fez assistir em uma direção diferente.

Outras dicas

Ok, tentei escrever o seu código e funcionou para mim.Aqui estão alguns itens que você pode tentar alterar;

  • O motivo pelo qual você não pode editar seu textField é porque está retornando NÃO ao método textFieldShouldBeginEditing.Altere para SIM.
  • Tente posicionar (se possível) seu textField um pouco abaixo do que você forneceu.Além disso, 20px é muuuito pequeno para um textField adequado, faça com que seja pelo menos 40px.Um textField de 20px posicionado em 0,0 pode ficar totalmente oculto se a barra de status estiver ativada no telefone.
  • Defina um borderStyle para seu textField.Pelo que eu sei, isso é importante para um textField aparecer e interagir bem.(por exemplo, textField.borderStyle= UITextBorderStyleRoundRect)

Dedos cruzados!:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top