Как инициализировать настраиваемую ячейку таблицы прототипов в раскадровках iOS 5? - PullRequest
36 голосов
/ 17 февраля 2012

Я перехожу на iOS 5 и раскадровки.Когда у меня есть табличное представление со стилем ячейки по умолчанию, все работает нормально.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifierFromStoryboard"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIdentifierFromStoryboard"];
    }
    return cell;
}

Я видел примеры, когда блок if (cell == nil) удален.Однако, если я вынимаю его, мое приложение вылетает с сообщением: «UITableView dataSource должен вернуть ячейку из tableView: cellForRowAtIndexPath:».Это не проблема, потому что она работает, как показано выше.

Моя проблема в том, что я хочу использовать собственный стиль для ячейки и, следовательно, не могу использовать initWithStyle.Как инициализировать пользовательскую ячейку, созданную на раскадровке?

В старом приложении до 5 было перо и класс, в котором использовалось что-то подобное, но теперь я использую раскадровку.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCustomTableCell *cell = (MyCustomTableCell *) [tableView dequeueReusableCellWithIdentifier:@"MyCustomIdentifier"];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomTableCell" owner:self options:nil];
        cell = (MyCustomTableCell *) [nib objectAtIndex:0];
    }
    return cell;
}

Ответы [ 5 ]

39 голосов
/ 17 февраля 2012

Так

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    return cell;
}
9 голосов
/ 23 января 2013

Это прекрасно сработало для меня (Xcode 4.5.2 и iOS 6.0):

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

    if( cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    }

    UILabel *title = (UILabel*) [cell viewWithTag:1000];
    UILabel *summary = (UILabel*) [cell viewWithTag:1001];
    [title setText:[ tableMainTitle objectAtIndex:indexPath.row]];
    [summary setText:[ tableSubTitle objectAtIndex:indexPath.row]];
    return cell;
}

Важно: не забудьте установить делегат и источник данных.

8 голосов
/ 09 августа 2012

Если вы загрузите свой контроллер представления, который содержит представление таблицы, используя:

MyViewController *myViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

Тогда внутри cellForRowAtIndexPath вам просто понадобится одна строка:

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

dequeueReusableCellWithIdentifier создаст один экземплярячейка, если ее нет, существует.

0 голосов
/ 22 мая 2015
static NSString *identifier=@"SearchUser";
SearchUserCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
if (cell==nil)
{
    cell=[[SearchUserCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
return cell;
0 голосов
/ 08 августа 2012

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

так я и делал, вот почему это не сработало

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

поэтому вместо UITableViewCell выделите ячейку вместе с вашим классом, как в приведенном выше примере «CustomCell»

Еще раз спасибо

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