0

テキスト フィールドがある各セルにカスタム セルを持つ 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
4

1 に答える 1

0

この質問は古いかもしれませんが、私のような同じ問題を抱えている人にとって、私の解決策は次のとおりです。

上記のコメントの 1 つから、セルが再利用されているというヒントを得ました。これが事実です。prepareForReuseその後、UITableViewCell クラスの一部としてメソッドを見つけることができます。このメソッドを ( を呼び出した後にsuper.prepareForReuse()) 使用すると、テキスト ラベルをデフォルトに戻す行を挿入できます。再利用されているセルは、デフォルトに戻ります。このメソッドは、viewDidLoad再利用されているセル (現在画面に表示されていないセル) の一種と考えてください...

注: テーブル ビューで下にスクロールして戻ると、これらのセルは再利用識別子を使用して再作成されていることを指摘しておく必要があります。したがって、セルに変更を加えてから少し下にスクロールしてから、セルが再び画面に表示されるようにすると、prepareForReuseメソッド内で何が行われます...セルIDまたは何かを追跡してみてください(私は変更されたセルの 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)
    }
}
于 2014-06-29T08:07:59.403 に答える