【问题标题】:UITextField randomly reusing text in tableviewUITextField 在 tableview 中随机重用文本
【发布时间】:2012-01-05 05:26:53
【问题描述】:

我的表格有一些问题,每个单元格中都有UITextFields。我注意到文本仍然在错误的单元格中被随机重用,即使我似乎正确保存了它。

- (void) textFieldDidEndEditing:(UITextField *)textField{
    if (textField == temperatureTextField){
        [self.vitalsDictionary setObject:self.temperatureTextField.text forKey:@"temperature"];
    }
    else if (textField == pulseTextField){
        [self.vitalsDictionary setObject:self.temperatureTextField.text forKey:@"pulse"];
    }
    else if (textField == respiratoryRateTextField){
        [self.vitalsDictionary setObject:self.temperatureTextField.text forKey:@"respiratory_rate"];
    }
}

CellForRowAtIndex:

        switch (indexPath.row) {
            case 0:
                cell.vitalsLabel.text = @"Temperature";
                cell.textField.text = [self.vitalsDictionary objectForKey:@"temperature"];
                self.temperatureTextField = cell.textField;
                break;
            case 1:
                cell.vitalsLabel.text = @"Pulse";
                cell.textField.text = [self.vitalsDictionary objectForKey:@"pulse"];
                self.pulseTextField = cell.textField;
                break;
            case 3:
                cell.vitalsLabel.text = @"Respiratory Rate";
                cell.textField.text = [self.vitalsDictionary objectForKey:@"respiratory_rate"];
                self.respiratoryRateTextField = cell.textField;
                break;

【问题讨论】:

  • 你是什么cellForRowAtIndexPath:
  • 底部方法是我的cellForRowAtIndexPath

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


【解决方案1】:

看起来像textFieldDidEndEditing: 中的简单拼写错误,您总是保存来自temperatureTextField 的值。将您的代码更改为:

- (void) textFieldDidEndEditing:(UITextField *)textField{
    if (textField == temperatureTextField){
        [self.vitalsDictionary setObject:self.temperatureTextField.text forKey:@"temperature"];
    }
    else if (textField == pulseTextField){
        [self.vitalsDictionary setObject:self.pulseTextField.text forKey:@"pulse"];
    }
    else if (textField == respiratoryRateTextField){
        [self.vitalsDictionary setObject:self.respiratoryRateTextField.text forKey:@"respiratory_rate"];
    }
}

【讨论】:

  • 我认为这是问题所在,但问题仍然存在,假设我在一个单元格中输入文本,然后向下滚动,在另一个单元格中输入文本,然后第一个单元格的文本有时会消失。
  • 您发布的代码我无法分辨,但看起来您在编辑单元格时正在覆盖数据源 (vitalsDictionary) 中的旧值。这意味着该类型的任何旧单元格都将获得该密钥的最新更改。要解决此问题,您需要一个数据源,该数据源允许以结构化方式为每种类型提供多个条目。可能是 NSDictionaries 的 NSArray。或者,如果您想保留您的更改,请查看 Core Data。
  • 嗯,一切正常。如果您能快速看一下,我可以给您发一份该项目的副本吗?它非常简单。
  • 抱歉,我没有时间深入研究整个项目。我最初的答案绝对是您发布的代码中的错误。除此之外,如果您仅在 vitalsDictionary 中存储 3 个值,而 vitalsDictionary 是您的表格的数据源(即您从 tableView:cellForRowAtIndexPath: 中获取单元格值的位置,那么您将只能在单元格中看到这三个值,不管你有多少个细胞。这是问题吗?
  • vitalDictionary共有10个cell,10个key。我只能在屏幕上显示 6,所以如果我在所有这些中输入文本,然后向下滚动,然后再向上滚动,它们要么是空的,要么没有数据。
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 2016-10-07
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多