我有一个带有自定义单元格的TableView,每个单元格都有一个文本字段,当我更改textField的值时,另一个单元格中的另一个文本字段会被更改。
例如:
我更改了单元格0中的值,单元格8也已更改
tableView cellForRowAtIndexPath方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Disbursment_CustomCell";
Disbursment_CustomCell *cell = (Disbursment_CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[Disbursment_CustomCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] ;
}
cell.disbursmentNumber_label.text = [[NSString alloc] initWithFormat:@"%d",[indexPath row]];
return cell;
}
CustomCell.m
@implementation Disbursment_CustomCell
@synthesize dateDisbursment_textField,pourcentage_Slider,pourcentage_textField;
-(IBAction) sliderChanged:(id) sender{
self.pourcentage_textField.text=[NSString stringWithFormat:@"%li", lroundf(self.pourcentage_Slider.value)];
}
- (void)handlePickerChanged:(id)sender
{
UIDatePicker *picker = (UIDatePicker *)sender;
NSDate *myDate = picker.date;
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd'/'MM'/'yyyy"];
NSString *prettyVersion = [dateFormat stringFromDate:myDate];
self.dateDisbursment_textField.text = prettyVersion;
}
- (IBAction)didBegin:(id)sender {
self.picker = [[UIDatePicker alloc] init];
self.picker.datePickerMode = UIDatePickerModeDate;
[self.picker addTarget:self action:@selector(handlePickerChanged:) forControlEvents:UIControlEventValueChanged];
dateDisbursment_textField.inputView = self.picker ;
}
@end
答案 0 :(得分:0)
这个问题可能已经过时了,但对于像我这样有同样问题的人来说,这是我的解决方案:
我从上面的一条评论中得到了一个提示,说正在重复使用该单元格。情况就是这样。然后,可以将prepareForReuse
方法作为UITableViewCell类的一部分找到。使用此方法(在调用super.prepareForReuse()
之后),您可以插入一些行,将文本标签设置回默认值。任何被重用的单元格都会跳回到默认值。将此方法视为viewDidLoad
类型的事物,但对于正在重复使用的单元格 - 当前不在屏幕上的单元格...
注意:我必须指出,一旦在表视图中向下滚动并备份,就会使用重用标识符重新创建这些单元格。因此,如果您对其中一个进行更改,然后向下滚动一点,然后再向上以使单元格再次显示在屏幕上,它将在prepareForReuse
方法中执行什么...所以请尝试跟踪单元格标识或者其他东西(我使用了一个包含更改单元格的id的数组)。
就目前而言,这是我发现的最好的。如果我找到更好的东西,我会编辑我的答案。
prepareForReuse
方法的代码:
override func prepareForReuse()
{
super.prepareForReuse()
if findInArray("\(stopName)\(routeNumber)\(lblTime.text)") == true
{
btnNotification.setTitle("☗", forState: UIControlState.Normal)
}
else
{
btnNotification.setTitle("☖", forState: UIControlState.Normal)
}
}