为什么UITextField的窗口为零?

时间:2012-06-06 23:38:23

标签: iphone ios cocoa-touch uikit uitextfield

我正在尝试为一系列UITextField实现“上一个”,“下一个”和“完成”按钮,每个按钮都包含在UITableViewCell的{​​{1}}中}}。我抓住UITableView中的UITextFields,并保留一个指向当前有效的NSMutableArray的整数。以下是分别点击“上一个”和“下一个”按钮时被触发的两个选择器。

UITextField

正如您所看到的,我正在记录当前&amp;的窗口属性。下一个文本字段,在-(IBAction)didSelectPreviousButton:(id)sender { if ((textFieldIndex - 1) >= 0) { UITextField *currentField = [self.testTextFields objectAtIndex:(textFieldIndex)]; UITextField *nextTextField = [self.testTextFields objectAtIndex:(--textFieldIndex)]; BOOL result = [nextTextField becomeFirstResponder]; NSLog([NSString stringWithFormat:@"currentField's window: %@", currentField.window]); NSLog([NSString stringWithFormat:@"nextTextField's window: %@", nextTextField.window]); } else { [self dismissKeyboard:sender]; } } -(IBAction)didSelectNextButton:(id)sender { if ((textFieldIndex + 1) < [self.inspectionItemSpec.numberOfTests intValue]) { UITextField *currentField = [self.testTextFields objectAtIndex:(textFieldIndex)]; UITextField *nextTextField = [self.testTextFields objectAtIndex:(++textFieldIndex)]; BOOL result = [nextTextField becomeFirstResponder]; NSLog([NSString stringWithFormat:@"currentField's window: %@", currentField.window]); NSLog([NSString stringWithFormat:@"nextTextField's window: %@", nextTextField.window]); } else { [self dismissKeyboard:sender]; } } 中,一切都是正确的。但是,在didSelectNextButton中,didSelectPreviousButton始终为nextTextField.window。为什么会发生这种情况?

(请注意,只有在用户点击下一个按钮一次后才会启用上一个按钮。)

2 个答案:

答案 0 :(得分:1)

这可能是因为每个UITextField都在UITableViewCell中,同时也在self.testTextFields中被引用。由于iOS中的表格重用单元格的方式,您可能(并且可能会)最终处于数组中下一个文本字段不是表格中下一个可见行的文本字段的情况。

如果您发布了tableView:cellForRowAtIndexPath:代码,则可能会使问题显而易见。

答案 1 :(得分:0)

窗口是视图层次结构的根。如果window属性为nil,则视图尚未通过类似

的视图添加到视图层次结构中
    [someViewInTheViewHierarchy addSubview:yourView].