UITextFieldDelegate вложенных UITextFields не вызывается - PullRequest
1 голос
/ 07 сентября 2011

У меня есть подкласс UIView (MyView), у которого есть UITextField в качестве подпредставлений.MyView реализует протокол UITextFieldDelegate, чтобы получать уведомления при щелчке по текстовым полям.Это работало хорошо.Теперь мне нужно поместить текстовые поля в своего рода «контейнер», чтобы можно было постепенно увеличивать и уменьшать этот контейнер (и все его дочерние элементы) с анимацией UIView.Поэтому я создал UIView (MySubview), сделал его подпредставлением MyView и поместил все текстовые поля внутри него.Анимация работает нормально, но UITextFieldDelegate больше не вызывается.Я думаю, это потому, что текстовые поля больше не являются прямыми потомками MyView.Есть ли другие способы справиться с этим?

ОБНОВЛЕНИЕ

Я сделал небольшую версию своего кода, возможно, это поможет найти проблему:

@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;
}

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

Хорошо, тогда я попробовал написать ваш код, и он мне помог.Вот несколько элементов, которые вы можете попробовать изменить:

  • Причина, по которой вы не можете редактировать текстовое поле, заключается в том, что вы возвращаете NO методу textFieldShouldBeginEditing.Измените это на ДА.
  • Попробуйте расположить (если возможно) текстовое поле немного ниже, чем вы дали.Кроме того, 20 пикселей в любом случае слишком малы для правильного textField, сделайте это как минимум 40 пикселей.Текстовое поле размером 20px, расположенное в позиции 0,0, может быть вообще скрыто, если в телефоне включена строка состояния.
  • Установите borderStyle для вашего textField.Насколько я знаю, это важно для textField, чтобы показать и хорошо взаимодействовать.(например, textField.borderStyle = UITextBorderStyleRoundRect)

Скрещенные пальцы!:)

0 голосов
/ 08 сентября 2011

Я отвечу на свой вопрос на всякий случай, если у кого-то возникнет такая же проблема - трудно представить, что кто-то совершает такую ​​глупую ошибку, хотя:

Я устанавливал фрейм контейнера меток в self.bounds,Но MyViewController создавал MyView с рамкой CGRectZero!Я сделал это изменение для поддержки анимации в то же время, когда добавил контейнер.Поэтому я подумал, что проблема связана с иерархией представлений.Мне стыдно!!!

В любом случае, спасибо всем помощникам, особенно Мадхумалу Гунетилеке, который своим ответом заставил меня смотреть в другом направлении.

...