我正在尝试为一系列UITextField
实现“上一个”,“下一个”和“完成”按钮,每个按钮都包含在UITableViewCell
的{{1}}中}}。我抓住UITableView
中的UITextFields
,并保留一个指向当前有效的NSMutableArray
的整数。以下是分别点击“上一个”和“下一个”按钮时被触发的两个选择器。
UITextField
正如您所看到的,我正在记录当前&的窗口属性。下一个文本字段,在-(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
。为什么会发生这种情况?
(请注意,只有在用户点击下一个按钮一次后才会启用上一个按钮。)
答案 0 :(得分:1)
这可能是因为每个UITextField
都在UITableViewCell
中,同时也在self.testTextFields
中被引用。由于iOS中的表格重用单元格的方式,您可能(并且可能会)最终处于数组中下一个文本字段不是表格中下一个可见行的文本字段的情况。
如果您发布了tableView:cellForRowAtIndexPath:
代码,则可能会使问题显而易见。
答案 1 :(得分:0)
窗口是视图层次结构的根。如果window属性为nil,则视图尚未通过类似
的视图添加到视图层次结构中 [someViewInTheViewHierarchy addSubview:yourView].