UITextField本身成为第一响应者......?

时间:2014-01-23 13:21:41

标签: ios iphone uitextfield

这仅在设备上发生,而不在模拟器上发生..

我有两个自定义视图,其中都有一个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];
    }
}

2 个答案:

答案 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
}

希望它有所帮助!