Question

J'ai une sous-classe d'un UIView (MyView) qui a une certaine UITextField comme subviews. MyView implémente le protocole UITextFieldDelegate afin d'être averti lorsque les champs de texte sont cliqués. Ce fonctionnait bien. Maintenant, je dois placer les champs de texte dans une sorte de « conteneur » pour pouvoir disparaître et ce récipient (et tous ses enfants) avec une animation UIView. Donc, j'ai créé un UIView (MySubview), fait de sous-vue MyView et placé tous les champs de texte à l'intérieur de celui-ci. L'animation fonctionne très bien, mais le UITextFieldDelegate ne soit pas appelé plus. Je pense qu'il est parce que les champs de texte ne sont pas les enfants directs de MyView plus. Y at-il d'autres façons de régler ce problème?

UPDATE

J'ai fait une petite version de mon code, peut-être cela aide à trouver le problème:

@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;
}
Était-ce utile?

La solution 2

Je vais répondre à ma propre question juste au cas où quelqu'un arrive à avoir ce même problème - difficile d'imaginer quelqu'un qui fait cette erreur stupide, si:

I mettait le châssis du conteneur d'étiquettes à self.bounds. Mais le MyViewController a été la création MyView avec un cadre de CGRectZero! Je l'ai fait ce changement à l'animation de soutien en même temps j'ai ajouté le récipient. Par conséquent, je pensais que le problème avait à voir avec la hiérarchie de la vue. Honte sur moi!!!

Quoi qu'il en soit, merci à tous, en particulier des aides à Madhumal Gunetileke qui, avec sa réponse, m'a fait regarder dans une autre direction.

Autres conseils

Ok, je pris un essai écrit votre code, et cela fonctionne pour moi. Voici quelques articles que vous pouvez essayer de changer;

  • La raison pour laquelle vous ne pouvez pas modifier votre textField est parce que vous revenez NON à la méthode textFieldShouldBeginEditing. Sélectionner OUI.
  • Essayez de positionnement (si possible) votre textField un peu en dessous de ce que vous avez donné. En outre, 20px est de toute façon waaaaay trop petit pour un textField bon, faire au moins 40px. Un 20px textField positionné à 0,0 peut-être tout à fait caché si la barre d'état est activée dans le téléphone.
  • Définissez un borderStyle pour votre textField. Pour autant que je sache, ce qui est important pour un textField pour montrer et Interagir bien. (Par exemple textField.borderStyle = UITextBorderStyleRoundRect)

Je croise les doigts! :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top