2013-09-17 3 views
0

У меня есть TableView с пользовательской ячейкой в ​​каждой ячейке У меня есть текстовое поле, когда я изменяю значение textField, другое текстовое поле в другой ячейке.Почему, когда я изменяю TextField в пользовательской ячейке, изменяется другое поле в другой ячейке

Exemple:

Я изменил значение в ячейке 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 
+3

может у пожалуйста, покажи мне - (UITableViewCell *) Tableview: (UITableView *) Tableview cellForRowAtIndexPath: (NSIndexPath *) метод indexPath ?? –

+0

использовать методы делегата textfield и перезагрузить определенную ячейку. –

+0

- это ячейка 8, видимая на экране или при прокрутке вниз, вы видите, что она изменилась? – Desdenova

ответ

0

Этот вопрос может быть старым, но для таких людей, как я, у меня такая же проблема, вот мое решение:

У меня есть намек на один из комментариев выше, говоря, что ячейка повторно используется. В этом случае. Затем можно найти метод prepareForReuse как часть класса UITableViewCell. используя этот метод (после того, как вы вызываете super.prepareForReuse()), вы можете вставить некоторые строки, которые вернут текстовые метки по умолчанию. Любая ячейка, которая будет повторно использована, вернется к умолчанию. Вспомните этот метод как тип viewDidLoad, но для повторно используемых ячеек - те, которые в настоящее время не отображаются на экране ...

ПРИМЕЧАНИЕ. Я должен указать, что после прокрутки вниз и резервного копирования в вашем таблицы, эти ячейки воссоздаются с использованием идентификатора повторного использования. Поэтому, если вы вносите изменения в один, затем немного прокрутите вниз, а затем создайте резервную копию, чтобы ячейка снова показывалась на экране, она будет делать что-то внутри метода prepareForReuse ... Поэтому попробуйте отслеживать идентификатор ячейки или что-то в этом роде (я использовал массив, в котором были изменены идентификаторы ячеек).

Как бы то ни было, это я лучший, что нашел. Если я найду что-то лучше, я отредактирую свой ответ.

Мой код для prepareForReuse метода:

override func prepareForReuse() 
{ 
    super.prepareForReuse() 
    if findInArray("\(stopName)\(routeNumber)\(lblTime.text)") == true 
    { 
     btnNotification.setTitle("☗", forState: UIControlState.Normal) 
    } 
    else 
    { 
     btnNotification.setTitle("☖", forState: UIControlState.Normal) 
    } 
} 
Смежные вопросы