3

CustomTableViewCellのサブクラスをUITableViewCellテーブルビューに表示するのに問題があります。

そのセルを表すためにxibを使用していますが、データソースデリゲートのコードは変更されていないと想定しています。テーブルビューセルXIB内に同一の再利用識別子を設定するようにしました。

テーブルセルを返すデータソースメソッドが正しく機能していないという事実に問題を切り分けました。これは次のとおりです。

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

    DataObject *foo = [self.dataArray objectAtIndex:indexPath.row];

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

    [[cell overview] setText:foo.overview];
    [[cell price] setText:foo.price];
    NSLog(@"cell initialized, description text is %@",cell.overview.text);

    return cell;
}

これが機能しない理由はわかりませんが、最後のログステートメントは常に最後に(null)を出力します。はいoverview、データオブジェクトのプロパティに有効な文字列が含まれていることを確認しました。についても同じですprice

4

2 に答える 2

4

1)カスタムセルクラスを分離する

2)XIB:ファイル所有者クラスをNSObjectに変更

3)XIB:UITableViewCellがMyTableViewCellに変更されました

4)テーブルビューコード内を次のように追加する場所

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

    static NSString *CellIdentifier = @"MyCell";

    MyTableViewCell *cell = (MyTableViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        NSArray *arrayCellXib = [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" 
                                                              owner:self 
                                                            options:nil];
        if (indexPath.row == 0) {
            // first table cell
            cell = [arrayCellXib objectAtIndex:0]; // *
            ...... 
         }else {

            cell = [arrayCellXib objectAtIndex:1]; // *
         }
        ...
      }
   return cell;

}

インデックス0,1...のオブジェクトは、複数のカスタムセルが必要な場合に、xibでMyTableViewCellを作成する順序のインデックスです。MyTableViewCellクラスで、uは無制限のカスタムセルを作成し、要件に応じて使用することを意味します。

通常、XIBで1つのカスタムセルを作成し、これを正確に実行します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    int thisRow = indexPath.row;
    NSString *exampleText = [yourData objectAtIndex:thisRow];

    static NSString *CellID = @"cu5";

    FancyCell *cell =
       (FancyCell *)[tableView dequeueReusableCellWithIdentifier:CellID];
    if (cell == nil)
        {
        NSArray *cellTeam =
          [[NSBundle mainBundle] loadNibNamed:@"FancyCell"
             owner:self options:nil];
        cell = [cellTeam objectAtIndex:0];
        }

    [cell someFunction:exampleText];
    [cell.someLabel setText:exampleText];
    return cell;
    }

希望はあなたを助けるかもしれません:)

于 2012-06-14T05:55:29.077 に答える
1

.hファイルに書き込みます。

IBOulet CustomTableViewCell *tableCell;

CustomTableViewCellの.xibファイルでファイルの所有者に接続します。

これを変更します(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

if (cell == nil) 
 {
     [[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil];
     cell = tableCell;
 }

お役に立てればと思います。

于 2012-06-14T04:55:08.240 に答える