今天在项目中遇到了一个问题:
我自己写了一个类继承UIVIew,该类就取名叫TextView吧,在TextView里面我创建了一个UITextFiled,然后我把该类导入到了一个控制器里,就叫TextController吧,在TextController里面我通过循环创建了四个TextView的对象,加到了TextController的View上面.然后我在控制器的视图上又加了一个点击手势,点击手势要达到让UITextFiled的键盘收起来的效果,本来觉得挺简单的,,但是遇到了问题,就是我创建了四个,结果前三个点击了不会让键盘收起,只有最后一个点击了才会让键盘收起.
以上就是问题的大概描述.
问题的原因:看我创建的方法
- (void)creatTechniqueDataViews{
for (NSInteger dataViewIndex = 0 ; dataViewIndex < TECH_DATA_UNIT.count; ++ dataViewIndex) {
TextView * dataView = [[TechniqueDataView alloc]initWithFrame:CGRectMake(dataViewIndex % 2 * WIDTH(320) / 2 + WIDTH(320)/15, WIDTH(330) + dataViewIndex / 2 * WIDTH(30) , WIDTH(320) /5 * 2, WIDTH(28))];
[self.view addSubview:dataView];
dataView.tag = TAG_TECHVIEW + dataViewIndex;
dataView.nameLabel.text = TECH_DATA_TYPE [dataViewIndex];
dataView.unitTypeLable.text = TECH_DATA_UNIT [dataViewIndex];
dataView.contentField.delegate = self;
}
}
这样创建的问题是什么,具体我也不是太清楚(因为我也是菜鸟)希望有大神可以给我解释一下.真的希望有人可以给我讲啊,我只是大概知道这样,是指针的问题吧......
解决的方法:
用TextView创建四个不同的对象,然后把每个类名放到一个数组里,也是通过循环来创建view,要用NSClassFromString来创建对象,这样就不会有问题了.
具体的代码:
for (NSInteger dataViewIndex = 0 ; dataViewIndex < TECH_DATA_UNIT.count; ++ dataViewIndex) {
//其中self.viewNameArray里装的是类名,self.viewArray是用来装view的
TechniqueDataView * view = (TechniqueDataView *)NSClassFromString(self.viewNameArray[dataViewIndex]);
view = [[TechniqueDataView alloc]initWithFrame:CGRectMake(dataViewIndex % 2 * WIDTH(320) / 2 + WIDTH(320)/15, WIDTH(330) + dataViewIndex / 2 * WIDTH(30) , WIDTH(320) /5 * 2, WIDTH(28))];
[self.backGroundImage addSubview:view];
view.tag = TAG_TECHVIEW + dataViewIndex;
view.nameLabel.text = TECH_DATA_TYPE [dataViewIndex];
view.unitTypeLable.text = TECH_DATA_UNIT [dataViewIndex];
view.contentField.tag = TAG_TECHVIEW + dataViewIndex;
view.contentField.delegate = self;
view.contentField.layer.borderColor = [[UIColor colorWithRed:0 green:255 blue:255 alpha:0.8] CGColor];
view.contentField.layer.borderWidth = 1.0f;
[self.viewArray addObject:view];
}
----------点击手势的点击事件为:
- (void)keyBoardHide:(UITapGestureRecognizer *)tap{
for (TechniqueDataView * view in self.viewArray) {
[view.contentField resignFirstResponder];
}
}