2015-07-31 2 views
-1

В моих приложениях строки добавляются к моему TableView с другого вида. Когда пользователь добавляет строки, пользователь возвращается обратно к TableView. Проблема в том, что ранее введенный текст больше не отображается.Значение UITextfield успешно обновлено, но не показано в таблице

Я могу загрузить его с помощью NSMutableDictionary, но пользователь не может его просмотреть. Любые идеи о том, что я должен делать? какой код я должен добавить и где его добавить? Большое спасибо!

Вот код от tableview метода. Я думаю, что исправление пойдет где-нибудь.

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{ 
static NSString *CellIdentifier = @"Cell"; 
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    cell.wtf = [[UITextField alloc]init]; 

    NSUInteger count =0; 
    for (NSMutableDictionary *search in dataForAllRows){ //this just helps me pull the right data out of an array of NSMutableDictionary's 

     if ([search valueForKey:@"indexSection"] == [NSNumber numberWithInteger:(indexPath.section -1)]) { 

      if ([search valueForKey:@"indexRow"] == [NSNumber numberWithInteger:indexPath.row]) { 

       NSMutableDictionary *match = [dataForAllRows objectAtIndex:count]; 
       [cell.wtf setText:[match objectForKey:@"wtf"]]; 
       NSLog(@"%@",cell.wtf.text); // this outputs the correct value in the command line 
      } 
     } 
     count++; 
    } 
    } 
} 

Вот код для моего CustomCell.m

#import "CustomCell.h" 

@implementation CustomCell 
@synthesize wtf, cellPath; 

- (void)awakeFromNib { 
// Initialization code 

} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
[super setSelected:selected animated:animated]; 
// Configure the view for the selected state 
} 
-(void)layoutSubviews{ 
wtf = [[UITextField alloc] initWithFrame:CGRectMake(7, 3, 65, self.contentView.bounds.size.height-6)]; 

self.wtf.delegate = self; 

[wtf setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; 
[wtf setAutocorrectionType:UITextAutocorrectionTypeNo]; 
[wtf setAutocapitalizationType:UITextAutocapitalizationTypeNone]; 
[wtf setBorderStyle:UITextBorderStyleRoundedRect]; 
wtf.textAlignment = NSTextAlignmentCenter; 
wtf.keyboardType = UIKeyboardTypeNumberPad; // 
[wtf setAutocapitalizationType:UITextAutocapitalizationTypeWords]; 
[wtf setPlaceholder:@"enter"]; 

[self.contentView addSubview:wtf]; 
} 
+2

Два улучшения сделают вашу жизнь намного проще: (1) Является ли клетка определена в раскадровке/И.Б.? Если нет, сделайте это, (2) простое преобразование вашего источника данных (dataForAllRows) позволит прояснить код и избежать полного поиска данных каждый раз, когда строка прокручивается в поле зрения. – danh

+0

@ danh Нет, моя ячейка не определена в сюжетной доске/ib. Я посмотрю, как это сделать. Это корень моей проблемы? Извините, если некоторые из моих вопросов являются основными. Я новичок в этом. – njyulan

+1

Не могли бы вы добавить 'cell.wtf.backgroundColor = [UIColor greenColor];' в свой код, чтобы убедиться, что текстовое поле добавляется в ячейку правильно. А также поделитесь кодом, в котором вы добавляете UITextfield в ячейку. – williamb

ответ

0

Для того, чтобы загрузить текст в UITextField в CustomCell я добавил следующий метод

CustomCell.м

-(void)viewMyCellData{ 
//here I can set text to my textfield 
wtf.text = @"Desired Text"; //this will read in every wtf textfield in the table 
//getting the right text from an array will be asked in another question that I will post 
//in a comment to this answer 
} 

Далее мы называем это с помощью [self viewMyCellData] в конце нашего -(void)layoutSubviews метода, который также находится в CustomCell.m

+0

[Добавлено вопрос о последующих действиях] (http://stackoverflow.com/questions/31800977/save-and-get-uitableviewcell-data-when-new-sections-are-added-as-section-0) – njyulan

0

Похоже, вы только настройки текстовое значение вашего текстового поля, если эта клетка не существует и подменяют экземпляр TextField к тому, который не имеет рамки, как упоминалось @danh. Я считаю, что вы хотите использовать повторное использование текстового поля после его добавления в ячейку contentview и изменить то, что это текстовое поле показывает для каждого пути индекса.

Попробуйте рефакторинга кода ячейки, чтобы больше походить на:

@implementation ExerciseCell 

#pragma mark - Init 

- (id)initWithStyle:(UITableViewCellStyle)style 
    reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style 
       reuseIdentifier:reuseIdentifier]; 

    if (self) 
    { 
     wtf = [[UITextField alloc] initWithFrame:CGRectMake(7, 3, 65, 44)]; 

     wtf.delegate = self; 

     [wtf setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; 
     [wtf setAutocorrectionType:UITextAutocorrectionTypeNo]; 
     [wtf setAutocapitalizationType:UITextAutocapitalizationTypeNone]; 
     [wtf setBorderStyle:UITextBorderStyleRoundedRect]; 
     wtf.textAlignment = NSTextAlignmentCenter; 
     wtf.keyboardType = UIKeyboardTypeNumberPad; 
     [wtf setAutocapitalizationType:UITextAutocapitalizationTypeWords]; 
     [wtf setPlaceholder:@"enter"]; 

     [self.contentView addSubview:wtf];   
    } 

    return self; 
} 

и ваш TableView класс DataSource, чтобы быть больше как

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{ 

    static NSString *CellIdentifier = @"Cell"; 
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

     [cell.wtf setDelegate:self]; 
    } 

    NSUInteger count = 0; 
    for (NSMutableDictionary *search in dataForAllRows){ //this just helps me pull the right data out of an array of NSMutableDictionary's 

     if ([search valueForKey:@"indexSection"] == [NSNumber numberWithInteger:(indexPath.section -1)]) { 

      if ([search valueForKey:@"indexRow"] == [NSNumber numberWithInteger:indexPath.row]) { 

       NSMutableDictionary *match = [dataForAllRows objectAtIndex:count]; 
       [cell.wtf setText:[match objectForKey:@"wtf"]]; 
       NSLog(@"%@",cell.wtf.text); // this outputs the correct value in the command line 
      } 
     } 
     count++; 
    } 
    } 
} 

Также вы имеете в виду, чтобы назначить делегат текстовое поле дважды? Однажды в ячейке и один раз в datasource таблицы?

+0

Я пробовал ваш код, и я все еще не вижу текст при загрузке представления. У вас есть еще предложения? – njyulan

+0

Вы меняете цвет текста своих текстовых полей где-нибудь еще на своем коде или возвращаете значение текста? Это странно, потому что с этим NSLog вы распечатываете файл cell.wtf.text, и вы говорите, что оно имеет правильное значение – williamb

+0

Нет, я нигде не меняю цвет. Я уверен, что я не сбрасываю текстовое значение. Когда текст вводится, он помещается в NSMutableDictionary, который затем помещается в массив. то в 'cellForRowAtIndexPath' я вытаскиваю его из этого массива. Я просто не знаю, как заставить его быть видимым. Я попытался '[self.tableview reloadData]' после того, как я установил текст, и нижняя строка исчезнет. Еще раз спасибо. – njyulan

1

Рассмотрите определение ячейки с идентификатором @ "Ячейка" в IB как строка прототипа таблицы. Затем используйте dequeueReusableCellWithIdentifier:forIndexPath: для извлечения ячейки в cellForRowAtIndexPath. Легче понять, как будут выглядеть ваши ячейки, и вы можете избежать некоторых ошибок, которые являются общими при определении subviews в коде.

Говоря об общих ошибках, ваш код, как представляется, представляет пару: он не формирует текстовое поле и не добавляет его в качестве подсмотра ячейки. Оба объяснят, что они не видят текстовое поле.

@ совет williamb является правильным и необходимым: только строить подтаблицы ячейки, если они отсутствуют, но здание ячейки является неполным ...

if (cell == nil) { 
    cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    UITextField *wtf = [[UITextField alloc]initWithFrame:CGRectMake(10,10,200,42]; 
    [wtf setDelegate:self]; 
    [cell addSubview:wtf]; 
    cell.wtf = wtf; 
} 

Как я уже говорил в комментариях, секционированная таблица должна для поддержки двумерного массива. Внешний массив представляет собой массив разделов. Каждая секция массив представляет собой массив словарей равных с той, что вы ищете каждый раз, когда с помощью этого метода, но по предварительной договоренности, так что все, что делается в cellForRowAtIndexPath индексируют в массив:

NSDictionary *d = self.myCorrectlyStructuredModel[indexPath.section][indexPath.row]; 
cell.wtf.text = d[@"wtf"]; 

Это не большая проблема чтобы построить это из того, что у вас есть. Подумайте об этом прямо после решения проблемы с текстовым полем. Я (или другие) может дать вам несколько советов - если вам нужно - о том, как построить эту структуру.

+0

Привет @Danh. Спасибо за Ваш ответ. Я определенно согласен, что 2D-массив - это лучший способ сохранить данные таблицы, и я буду работать над этим после решения этой проблемы. В отдельном примечании проблема с моим полем UIText не связана с текстовым полем. (Я определил его в файле customCell.m, который я только что редактировал в моем исходном вопросе). Проблема, с которой я сталкиваюсь, заключается в том, что когда я добавляю новые ячейки и возвращаюсь в «TableView», поле 'UITextfield» показывает только текст заполнителя, который присваивается ему. Он не загружает значение cell.wtf.text. – njyulan

+0

Еще раз.Я решил часть своей проблемы и задавался вопросом, можете ли вы поделиться со мной любыми советами. Мне удалось загрузить некоторые мои данные в UITextField из моего массива NSMutableDictionary's. Но это не загрузка, как я этого хочу. Первоначально я решил использовать словарь по 2-мерному массиву, потому что каждый новый раздел становится секцией 0 в таблице, а словарь - единственное решение, о котором можно подумать. Как я могу использовать массив 2d, когда я добавляю разделы таким образом? Благодаря!! – njyulan

+0

Рассмотрите этот вопрос, касающийся настройки ячеек. Надеюсь, он решен и должен быть отмечен правильно. Пожалуйста, создайте вопрос о том, какая модель лучше всего подходит для типа таблицы, которую вы хотите. Пожалуйста, опишите таблицу и данные и оставьте мне ссылку здесь. – danh

Смежные вопросы