2013-07-11 7 views
0

У меня есть массив под названием totalWins, внутри которого есть массивы, называемые winningNumbers. Внутри него есть 70 номеров, которые мне нужно отобразить в ячейке UITableView. Я подклассифицировал UITaableViewCell и создал несколько выходов UITextField. Хорошая старая мода способ сделать это:Использование тегов и повторное использование ячеек

NSArray *winningNumbers = [[_currentSearchResults objectAtIndex:indexPath.row]objectForKey:@"winningNumbers"]; 
cell.txtFld1.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:0]]; 
cell.txtFld2.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:1]]; 
.... 
.... 

Работает отлично. Я пытался сэкономить некоторое время кодирования и сделал это: (после седений вверх TextFields тегов конечно)

for(int i=0;i<70;i++) 
    { 
     UITextField *tempField = (UITextField *) [self.view viewWithTag: 777+i]; 

     tempField.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:i]]; 
    } 

Проблема заключается в том, что из-за повторное использование ячеек число перепуталось при прокрутке табличный вид. Каков предпочтительный способ выполнить описанное выше, не записывая cell.txtFld1.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:0]]; 70 раз?

+0

Это может быть полезно, если вы разместите весь метод cellForRowAtIndexPath .. – Eyal

ответ

1

Использование [cell.contentView viewWithTag: 777 + я] вместо self.view. Ваше решение в порядке.

+0

изменил код 'для (INT I = 0; я <17; я ++) { UITextField * tempField = (UITextField *) [cell.contentView viewWithTag: 777 + i]; tempField.text = [NSString stringWithFormat: @ "% @", [winNumbers objectAtIndex: i]]; } 'Но я все еще получаю такой же плохой результат. – Segev

+0

Очень сложно понять, где проблема, когда смотришь только на кусок кода. Проблема возникает вне этого кода. Установлены значения тегов. Пройдите через все UITextField и очистите текст, когда вы вернете ячейку для таблицы. Возможно, вы используете неправильный лимит 17 и должны использовать 70. Извините за мой английский. – Sk0prion

0

Подкласс UITableViewCell и создайте массив UITextFields.

@interface YourCell: UITableViewCell 
@property (nonatomic, readonly) NSArray *textfields; 
@end 

ссылки Хранить в текстовых полях в Ивар резервного копирования textfields собственности.

Затем вы можете сделать

NSArray *textfields = cell.textfields; 
for (int i = 0; i < textfields.count; i++) 
{ 
    UITextfield *field = [textfields objectAtIndex:i]; 
    // set textfield's text 
} 
+0

Я уже создал подкласс UITableViewCell. Не могли бы вы дать мне некоторые подробности о том, как это сделать? – Segev

+0

Добавлен бит кода для ответа. – Kreiri

+0

Где ссылка на текстовое поле? Как компилятор узнает, в каком месте текстового поля я хочу ввести данные? – Segev

0

Просто удалите все созданные текстовые поля и создавать их каждый раз.

for(UIView *view in cell.contentView.subviews) 
{ 
    [view removeFromSuperView]; 
} 
+0

Все текстовые поля находятся в другом месте ячейки. Как я могу создавать их каждый раз? – Segev

+0

И что с этим связано RemoveFromSuperView?Спасибо – Segev

+0

Как я понимаю, вы динамически добавляете их в ячейку? Если нет, то, конечно, это не поможет – nerowolfe

1

Я не пробовал это, но он может работать:

for (id subview in [cell.contentView subviews]) { 
    if([subview isKindOfClass:[UITextField class]]) { 
     UITextField *textfield = (UITextField*)subview; 
     textfield.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:(textfield.tag-777)]]; 
    } 
} 

Надеется, что это помогает.

+0

Хорошее решение, но я получаю тот же самый изменяющийся \ пустой текст в ячейках. – Segev

+0

см. Мое редактирование. это должно работать, если ваши теги установлены правильно. – Nameet

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