UITextFields开始编辑后交换自定义UITableViewCells

时间:2016-01-23 23:00:50

标签: ios objective-c uitableview cocoa-touch uitextfield

我正在处理UITableView相当奇怪的问题。 我在Storyboard中有2个原型单元格:其中一个有一个UITextField,另一个有两个UITextFields。 我有一个类TextFieldTableViewCell,其子类UITableViewCell并将IBOutlets连接到这些UITextFields。在prepareForReuse我将所有商店设置为mainLabeladditionalLabel为零。 这些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天调试这个问题,但看不出为什么以及如何发生这种情况。

enter image description here

enter image description here

enter image description here

我认为这与UITextFields有关,因为它只是在被点击开始编辑时才会发生。我试过从我的ViewController中删除他们的代理,但它没有解决任何问题。此外,我尝试删除inputAccessory,TPKeyboardAvoiding等,但问题仍然存在。

感谢您的帮助。

0 个答案:

没有答案