我有一个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;
}
答案 0 :(得分:4)
好的,我试着写出你的代码,这对我有用。以下是您可以尝试更改的一些项目;
手指交叉! :)
答案 1 :(得分:0)
我会回答我自己的问题,万一有人碰巧遇到同样的问题 - 很难想象有人会犯这样愚蠢的错误,但是:
我正在将标签容器的框架设置为self.bounds。但是MyViewController用CGRectZero框架创建了MyView!我在添加容器的同时进行了更改以支持动画。因此我认为问题与视图层次结构有关。对我感到羞耻!
无论如何,感谢所有帮助者,尤其是Madhumal Gunetileke,他的回答使我看向不同的方向。