1

テーブルビューでセルにデータを入力しようとしています(UITableViewの上のセグメント化されたコントロールで、ストーリーボードで作成された異なる要素を持つ2つのカスタムタイプのセルがあり、識別子「info_cell」と「person_cell」があります。何をロードするかを決定します[tableViewリロード]) . セル内の UILabels にアクセスしようとすると、ラベルが null であることがわかります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *CellIdentifier = (viewType == INFO_VIEW) ? @"info_cell" :@"person_cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    if(viewType == INFO_VIEW){
        NSLog(@"INFO = %@", info_text_some_string);
        UILabel *lblInfo = (UILabel *)[cell viewWithTag:200];
        [lblInfo setText:info_text_some_string];
    }
    else{
        // there is part for person
    }
    return cell;
}

テーブル内にプロトタイプ セルが 1 つしかない場合も同じコードが機能します (UITableView は UIVewController 内にあります)。ここで問題になる可能性があるのは、100 回チェックしました。セル識別子は問題ありませんが、ラベル タグは 200 です。

これは UISegmentControl のアクションです

- (IBAction)changeView:(id)sender {
    UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
    NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;

    if (selectedSegment == 0) {
        viewType = INFO_VIEW;
    }
    else{
        viewType = PERSON_VIEW;
    }
    [tableView reloadData];
}

tableView に必要なメソッドを追加し、デリゲート i データソースに接続しました。なぜそれが null なのか、誰にも分かりますか?

4

3 に答える 3

0

UITableViewCellsを正しくサブクラス化したと仮定すると(たとえば、InfoCellとPersonCellを使用します)、これを試すことができます。

if(viewType == INFO_VIEW)
{
    InfoCell *cell = (InfoCell *)[tableView dequeueReusableCellWithIdentifier:@"info_cell"];
    // do your stuff for info here
}
else if(viewType == PERSON_VIEW)
{
    PersonCell *cell = (PersonCell *)[tableView dequeueReusableCellWithIdentifier:@"person_cell"];
    // do your stuff for person here
}
于 2013-03-19T06:24:51.933 に答える
0

CellRorRowAtIndexPathでカスタム セルを使用するときは常に、このプロセスに従います。

   if(!cell)
    {
        cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
        //customcell is your UITableViewCell created by you in ur xib
        NSData *archivedData =[NSKeyedArchiver archivedDataWithRootObject:customcell];
        cell =[NSKeyedUnarchiver unarchiveObjectWithData:archivedData];

    }
    if(viewType ==INFO_VIEW)
     {
    [(UILabel *)[cell viewWithTag:200] setText:@"you text"];
     }
  else{
        // person view....
      }

このようにして、セルのすべての要素を収集し、値を設定します。結果を共有してください

于 2013-03-19T05:02:07.243 に答える
-1

このようなことをしてみませんか?

[[cell textLabel] setText: @"text goes here"];

そして、UILabelの部分をスキップしますか?

于 2013-03-18T21:47:29.347 に答える