Не могу повторно использовать пользовательские ячейки в табличном представлении - PullRequest
0 голосов
/ 06 марта 2012

Я создал пользовательскую ячейку, которая содержит метку и текстовое поле. Я использую эту пользовательскую ячейку в табличном представлении. Когда я ввожу данные в текстовое поле и когда я прокручиваю представление, мои данные заменяются. Для каждой прокрутки они заменяются / стираются. Любой говорит мне, где я делаю ошибку. Мой код ячейки идет здесь. Спасибо!

-(UITableViewCell *)returnCellForEach:(UITableView *)tableView
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Identifier"];
    if (cell == nil)
    {
        [[NSBundle mainBundle] loadNibNamed:@"CustomCellToAddDetails" owner:self options:nil];
        cell = customCell;
//        customCell = nil;
        customLabel = (UILabel *)[customCell.contentView viewWithTag:100];
    }
    return cell;
}

-(UITextField *)dataField
{
    UITextField *textField = customField;

    return textField;
}

Ответы [ 4 ]

0 голосов
/ 06 марта 2012

хорошо, я понял, вы создали класс для customCell и заменили эту строку

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Identifier"];

на

CustomCell *customCell=(CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
0 голосов
/ 06 марта 2012

Я не знаком с именами методов, которые вы используете, в моем случае мне нужно было создать пользовательский класс ячеек табличного представления вне класса tableview,

класс называется QRTYPECELL и следующие коды:

@implementation QRTypeCell
@synthesize imageView;
@synthesize labelview;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
    imageView = nil;
    labelview= nil;
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,30,30)];
    imageView.contentMode = UIViewContentModeCenter;
    [self.contentView addSubview:imageView];
    self.contentView.backgroundColor = [UIColor blackColor];


    UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
    label.textColor = [UIColor greenColor];
    label.backgroundColor = [UIColor blackColor];

    label.font = [UIFont systemFontOfSize:17];
    self.labelview = label;
    [self.contentView addSubview:label];


}
return self;}

А затем в классе TableView:

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

QRTypeCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[QRTypeCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}
    CurrentQRCode = (QRCode *)[fetchedResultsController objectAtIndexPath:indexPath];
    NSString *icon = CurrentQRCode.parsed_icon;
    NSString *string = CurrentQRCode.parsed_string;
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;    
    NSString *filePath = [[NSBundle mainBundle] pathForResource:icon ofType:@"png"]; 
    UIImage *image_file = [UIImage imageWithContentsOfFile:filePath];
0 голосов
/ 06 марта 2012

в IB вы видите поле «Идентификатор», в него помещается любое значение и используется это значение в качестве идентификатора для повторного использования.Я думаю, что это поможет вам.

0 голосов
/ 06 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...