Программирование iPhone cellForRowAtIndexPath не вызывается даже после установки делегата - PullRequest
0 голосов
/ 01 декабря 2009

Я пытаюсь создать и нарисовать UITableView, заполненный массивом. Я создал UIViewController и установил UIViewController в качестве делегата моего табличного представления. Однако кажется, что мой метод cellForRowAtIndexPath не вызывается при создании таблицы, поэтому моя таблица никогда не заполняется. Что мне здесь не хватает? (Все метки инициализируются в этой функции, так как я просто пытаюсь создать главное меню, используя таблицу, все записи будут исправлены).

// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {

prefTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain];

[prefTable setDelegate:self];

//NSIndexSet *tmpIndRange = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(0,1)];

//[prefTable insertSections:tmpIndRange withRowAnimation:UITableViewRowAnimationNone];

//[tmpIndRange release];

labelArray = [[NSMutableArray alloc] initWithCapacity:10];
[labelArray addObject:NSLocalizedString(@"Account ID",@"C_ACC_ID")];
[labelArray addObject:NSLocalizedString(@"Site ID",@"Site_ID")];
[labelArray addObject:NSLocalizedString(@"Station ID",@"Station_ID")];
[labelArray addObject:NSLocalizedString(@"Encryption Key",@"ENC_KEY")];
[labelArray addObject:NSLocalizedString(@"Encryption On",@"ENC_ON")];

placeholderArray = [[NSMutableArray alloc] initWithCapacity:10];
[labelArray addObject:NSLocalizedString(@"Required",@"Required")];
[labelArray addObject:NSLocalizedString(@"Required",@"Required")];
[labelArray addObject:NSLocalizedString(@"Required",@"Required")];
[labelArray addObject:NSLocalizedString(@"Required",@"Required")];
[labelArray addObject:NSLocalizedString(@"Required",@"Required")];

self.view = prefTable;
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField {

    NSInteger currenttag = textField.tag;

    NSLog(@"%d",textField.tag);

    //accountId = textField.text;
    //stationId = textField.text;
    //siteId = textField.text;

    [textField resignFirstResponder];

    return YES;
}

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...

    [cell setAccessoryType:UITableViewCellAccessoryNone];
    [cell.textLabel setText:[labelArray objectAtIndex:indexPath.row]];
    //((TextInputTableCell *)cell).textField.placeholder = [placeholderArray objectAtIndex:indexPath.row];

    return cell;    
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 4;
}

Кроме того, будет ли лучше, если я назначу пункты меню с использованием источника данных? Кажется, что заголовки разделов могут быть назначены только с использованием источника данных. Спасибо!

1 Ответ

3 голосов
/ 01 декабря 2009

tableView:cellForRowAtIndexPath: является частью протокола UITableView DataSource - не UITableViewDelegate. Вам нужно сделать свой контроллер источником данных UITableView:

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