стыль UITableViewCell і dequeueReusableCellWithIdentifier

Так што я зарэгістраваць сваю камеру:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];

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

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
   //setting up the cell
}

Пытанне ў тым, што я не магу ўсталяваць cell.detailTextLabel.text ўласцівасці. Клетка ніколі не нуль .

15
Няма памылак. Проста няма тэксту ў detailedTextLabel.
дададзена аўтар Padin215, крыніца
Любое паведамленне пра памылку? Вы карыстаецеся IB або раскадровку?
дададзена аўтар Valent Richie, крыніца

7 адказы

Калі выклікаецца першым, прагляд табліцы RegisterClass прычыніць dequeueReusableCellWithIdentifier для вяртання не-нуль, калі вочка запалак паўторнага выкарыстання ячэйкі ідэнтыфікатараў.

Я лічу, што RegisterClass звычайна выкарыстоўваецца для вочак, якія будуць прыстасаваныя ячэйкі атрыманы з UITableViewCell . Карыстацкі элемент можа overrite initWithStyle і ўсталяваць стыль там.

Гэта не заўсёды неабходна, каб стварыць карыстацкую вочка.

Калі вы хочаце ўсталяваць стыль ячэйкі, то не называйце RegisterClass .

27
дададзена
Так, не рэгіструючы клас зрабіў гэта. Дзякуючы.
дададзена аўтар Padin215, крыніца
Выпраўленая праблема @RahulJiresal «s, каб пераканацца, што вы карыстаецеся [Tableview dequeueReusableCellWithIdentifier: @" MyIdentifier "] і NOT [Tableview dequeueReusableCellWithIdentifier: @" MyIdentifier "forIndexPath: indexPath]
дададзена аўтар Gomfucius, крыніца
Не рэгіструючы клас кідае NSInternalInconsistencyException . «Прычына:" не ўдалося з чаргі вочкі з ідэнтыфікатарам FileLogCell - неабходна зарэгістраваць пяро або клас для ідэнтыфікатара або падлучэння ячэйкі прататыпа ў раскадроўкі »
дададзена аўтар Rahul Jiresal, крыніца

вам трэба зрабіць, а затым 3 змены для дасягнення мэты вам:

  1. remove registerClass statement.
  2. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; => UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  3. use initWithStyle:UITableViewCellStyleSubtitle

як правіла, існуе два спосабу стварэння вочкі з субфрагменте, па-першае, з карыстацкай UITableViewCell, усталяваць стыль у ініцыялізацыі. па-другое, з рушыла кодам, які з'яўляецца тое, што вы хацелі:

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
8
дададзена

Вы павінны змяніць стыль ячэйкі:

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

да гэтага

if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }

Гэта будзе працаваць для вас.

2
дададзена
Пасля таго, як я выдаліў рэгіструючы клетку, клетка была роўная нулю і зрабіў ініцыялізуюцца. І мне трэба, каб змяніць стыль ячэйкі, дзякуй.
дададзена аўтар Padin215, крыніца
Код астатнія застаюцца такімі ж вам проста трэба змяніць стыль вочка.
дададзена аўтар Vinod Singh, крыніца

Самы просты спосаб складаецца ў выкарыстанні раскадроўкі, і ўсталяваць стыль вочка ў IB. У гэтым выпадку, вы не павінны нічога рэгістравацца, Вы не павінны мець, калі (вочкі == нуль) становішча. Гэта, здаецца, не мае значэння, карыстаецеся Ці вы dequeueReusableCellWithIdentifier: ці dequeueReusableCellWithIdentifier: forIndexPath. Яны абодва гарантавана вяртае вочка, калі гэтая ячэйка створана ў раскадроўкі.

1
дададзена
Я не аддаю перавагу нас IB, не выкарыстоўваў яго шмат, і палічыў за лепшае застацца усё ў кодзе. Мне трэба, каб атрымаць больш знаёмыя з выкарыстаннем IB, хоць. дзякуй
дададзена аўтар Padin215, крыніца

Стварэнне карыстацкага элемента. Зменіце стыль у інтэрфейсе будаўніка. Выкарыстоўвайце таблічныя зарэгістраваць вочка з NIB кантролера прадстаўлення.

Set the style

І код:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.tableView registerNib:[UINib nibWithNibName:@"YourCustomCell" bundle:nil] forCellReuseIdentifier:kReuseIdentifier];
}

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    YourCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:kReuseIdentifier];

   //Do things with the cell. 
   //The cell has no chance to be nil because you've already registered it in viewDidLoad method. 
   //So there's not need to write any code like if(cell==nil).
   //Just use it.

    return cell;
}
1
дададзена

Паспрабуйце выкарыстоўваць стыль UITableViewCellStyleSubtitle для вочка. Змяніўшы радок у, калі заява да гэтага:

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
1
дададзена

Гэта стары пытанне. Я проста хачу, каб забяспечыць альтэрнатыўнае рашэнне.

Чаму б не паспрабаваць ніжэй, пасля рэгістрацыі вочкі:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

нешта рабіць:

[cell initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier ];

Гэта працуе для мяне.

1
дададзена