这仅在设备上发生,而不在模拟器上发生..
我有两个自定义视图,其中都有一个UITextField(Child1和Child2)。 这两个视图都放在另一个UIView(Say viewA)上。 现在我的要求是,当在其中一个文本字段中输入文本时,我需要清除其他文本字段内容,因此在textFieldDidChange:方法中,我通知viewA,而不是迭代它的子视图找到Child1并设置其属性。但是只要我访问此Child1的textField以启用其userInteraction或将其文本设置为nil。这个文本域现在成为第一个响应者。
我不确定为什么会这样做。您可以查看以下代码以获取更多信息。
viewA中的方法:
for (UIView *view in [self subviews])
{
if ([view isKindOfClass:[ChildView class]])
{
ChildView *concernedCustomerView = (ChildView *)view;
if (concernedCustomerView.typeOfCompartment == CompartmentTypeNone)
{
[concernedCustomerView.checkBoxButton setSelected:NO];
[concernedCustomerView.countSwitch setOn:NO animated:YES];
concernedCustomerView.countTextField.userInteractionEnabled = YES;
concernedCustomerView.countTextField.alpha = 1.0f;
concernedCustomerView.countTextField.text = nil;
}
}
}
自定义子视图中的方法
-(void)textFieldDidChange:(id)sender
{
NSString *note = _countTextField.text;
note = [note stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//If we are checking note for nil it should be before calling trimming white space
if (note && note.length > 0)
{
[_checkBoxButton setSelected:YES];
if (note.length == 3 && note.integerValue == 999)
{
[_countSwitch setOn:YES animated:YES];
_countTextField.userInteractionEnabled = NO;
_countTextField.alpha = 0.5f;
_countTextField.text = nil;
// [_countSwitch sendActionsForControlEvents:UIControlEventValueChanged];
}
}
else
{
[_checkBoxButton setSelected:NO];
}
if ([self.delegate conformsToProtocol:@protocol(ChildViewDelegate)] &&
[self.delegate respondsToSelector:@selector(adjustStateOfOtherControls:andCheckBoxStatus:)])
{
[self.delegate adjustStateOfOtherControls:_typeOfCompartment andCheckBoxStatus:_checkBoxButton.selected];
}
}
答案 0 :(得分:0)
不要将视图对象设置为nil,因为它们处于活动状态且控制器仍处于活动状态,
尝试设置_countTextField.text = @"";
,以便您的文本字段变空。
答案 1 :(得分:0)
只是建议:
1)您可以将标签分配给子视图和uitextfields,而不是手动迭代子视图,例如:
child1View.tag = 100;
child2View.tag = 200;
...
textField1.tag = 10;
textField2.tag = 20;
然后通过以下方式从父视图A获取子引用:
UIView *child1View = [viewA viewWithTag:100];
UIView *child2View = [viewA viewWithTag:200];
2)将子视图textfield delegate设置为公共视图控件
3)处理一个
- (void)textFieldDidBeginEditing:(UITextField *)textField
4)Iniside此方法检查
if(textField.tag==10)
{
do stuff
}
else if(textfield.tag==20)
{
do other stuff
}
希望它有所帮助!