我正在处理UITableView
相当奇怪的问题。
我在Storyboard中有2个原型单元格:其中一个有一个UITextField
,另一个有两个UITextFields
。
我有一个类TextFieldTableViewCell
,其子类UITableViewCell
并将IBOutlets
连接到这些UITextFields
。在prepareForReuse
我将所有商店设置为mainLabel
和additionalLabel
为零。
这些UITextFields
的代表已与我的ViewController
相关联。
tableView:cellForRowAtIndexPath
看起来像这样:
NSString *cellReuseIdentifier;
switch (index) {
case addressRowName:
case addressRowEmail:
case addressRowPhoneNumber:
cellReuseIdentifier = singleTextFieldItemCellReuseIdentifier;
break;
default:
cellReuseIdentifier = doubleTextFieldItemCellReuseIdentifier;
break;
}
TextFieldTableViewCell *cell = (TextFieldTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:cellReuseIdentifier];
if(!cell) {
cell = [[TextFieldTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellReuseIdentifier];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
switch (index) {
case addressRowName:
cell.mainTextField.placeholder = BFLocalizedString(kTranslationNamePlaceholder, @"John Doe");
break;
case addressRowEmail:
cell.mainTextField.placeholder = BFLocalizedString(kTranslationEmailPlaceholder, @"pete@email.com");
cell.mainTextField.keyboardType = UIKeyboardTypeEmailAddress;
break;
case addressRowStreetHouseNumber:
cell.mainTextField.placeholder = BFLocalizedString(kTranslationStreetPlaceholder, @"Eternity street");
cell.additionalTextField.placeholder = BFLocalizedString(kTranslationHouseNoPlaceholder, @"12");
break;
case addressRowCityPostalCode:
cell.mainTextField.placeholder = BFLocalizedString(kTranslationCityPlaceholder, @"Sacramento");
cell.additionalTextField.placeholder = BFLocalizedString(kTranslationPostalCodePlaceholder, @"95837");
break;
case addressRowPhoneNumber:
cell.mainTextField.placeholder = BFLocalizedString(kTranslationPhoneNumberPlaceholder, @"+420 755 999 090");
cell.mainTextField.keyboardType = UIKeyboardTypePhonePad;
break;
default:
break;
}
cell.mainLabel.text = [NSString stringWithFormat:@"%ld", index];
cell.additionalLabel.text = [NSString stringWithFormat:@"%ld", index];
[inputAccessoryView addInputView:cell.mainTextField];
cell.mainTextField.inputAccessoryView = self.inputAccessoryView;
[inputAccessoryView addInputView:cell.additionalTextField];
cell.additionalTextField.inputAccessoryView = self.inputAccessoryView;
return cell;
有人会说“没有火箭科学”。但这就是事情。
如果我滚动整个表格查看每一个都可以。
如果我点击最后一个单元格键盘出现(我正在使用TPKeyboardAvoiding
),单元格向上滚动,第一个单元格不可见。如果我向上滚动每一个都可以。
但是,如果我点击第一个单元格那么最后一个单元格,键盘出现,单元格向上滚动,第一个单元格不可见。如果我向上滚动,则交换第一个和第二个单元格。
我正在为您提供描述截图以更好地设想情况(单元格中的数字是indexPath行)。我花了最近2天调试这个问题,但看不出为什么以及如何发生这种情况。
我认为这与UITextFields
有关,因为它只是在被点击开始编辑时才会发生。我试过从我的ViewController中删除他们的代理,但它没有解决任何问题。此外,我尝试删除inputAccessory,TPKeyboardAvoiding
等,但问题仍然存在。
感谢您的帮助。