嵌套UITextField的UITextFieldDelegate未被调用

时间:2011-09-07 11:58:57

标签: ios iphone objective-c uitextfield uitextfielddelegate

我有一个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 个答案:

答案 0 :(得分:4)

好的,我试着写出你的代码,这对我有用。以下是您可以尝试更改的一些项目;

  • 无法编辑textField的原因是因为您向textFieldShouldBeginEditing方法返回NO。将其更改为YES。
  • 尝试定位(如果可能)你的textField比你给出的略低。另外,20px无论如何都是waaaaay太小而不适合正确的textField,至少40px。如果手机中的状态栏已打开,则可能会隐藏位于0,0的20px textField。
  • 为textField设置borderStyle。据我所知,这对于textField显示和交互很重要。 (例如textField.borderStyle = UITextBorderStyleRoundRect)

手指交叉! :)

答案 1 :(得分:0)

我会回答我自己的问题,万一有人碰巧遇到同样的问题 - 很难想象有人会犯这样愚蠢的错误,但是:

我正在将标签容器的框架设置为self.bounds。但是MyViewController用CGRectZero框架创建了MyView!我在添加容器的同时进行了更改以支持动画。因此我认为问题与视图层次结构有关。对我感到羞耻!

无论如何,感谢所有帮助者,尤其是Madhumal Gunetileke,他的回答使我看向不同的方向。