1

コードの一部に問題があります。私は非常に単純な解決策があると確信しています。基本的に、単一のテーブルビュー クラスを使用して、さまざまなデータ (コンテンツ、アイテム、動き) を表示しています。3 つの異なるテーブル ビュー コントローラーを用意する代わりに、どのセルがタップされたかを追跡し、関連するデータを表示する 1 つを用意しました。すべてが本当にうまくいきます!別の nib ファイルでカスタム セル クラスを使用しているため、どのセルがタップされたか (self.title) をチェックし、それに基づいてカスタム セルを作成する if ステートメント (または switch ステートメント) を適切に実装する必要があります。

明らかに、私が抱えている問題は範囲にあります.cell.imageViewは、ifステートメントの場合は範囲​​外であるため、何を参照しているのかわかりません。

使ってみました

id cell;

同じエラーが発生します。各「タイトル」が異なるカスタムセルを使用するようにこれを達成する方法は何ですか?

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

            static NSString *CellIdentifier = @"Cell";


            if (title == @"Content" || title == @"Favorite Content")
            {
                ContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

                if (cell == nil) {
                    NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"ContentCell" owner:self options:nil];

                    for (id currentObject in objects) {
                        if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                            cell = (ContentCell *)currentObject;

                            break;
                        }
                    }
                }

            }
            else if (title == @"Items" || title == @"Favorite Items")
            {
                ItemCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

                if (cell == nil) {
                    NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"ItemCell" owner:self options:nil];

                    for (id currentObject in objects) {
                        if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                            cell = (ItemCell *)currentObject;

                            break;
                        }
                    }
                }

            }
            else if (title == @"Moves" || title == @"Favorite Moves")
            {
                MoveCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

                if (cell == nil) {
                    NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"MoveCell" owner:self options:nil];

                    for (id currentObject in objects) {
                        if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                            cell = (MoveCell *)currentObject;

                            break;
                        }
                    }
                }

            }

            cell.imageView.image = [UIImage imageNamed:[[self.theData objectAtIndex:indexPath.row] objectForKey:@"image"]];
            cell.contentName.text = [[self.theData objectAtIndex:indexPath.row] objectForKey:@"name"];

            return cell;

    }

どんな助けでも素晴らしいでしょう!何時間も画面を見つめていたために、簡単なことを見落としていたに違いありません。ありがとう!

4

1 に答える 1

4

NSString *CellIdentifier;新しいカスタムセルを使用するたびに値を変更する必要があります。入力した値と同じ値を入力する必要があります

ここに画像の説明を入力してください

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

NSString *CellIdentifier;
UITableViewCell *cell;

if (title == @"Content" || title == @"Favorite Content")
{
    CellIdentifier = @"Cell";
    ContentCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"ContentCell" owner:self options:nil];

        for (id currentObject in objects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (ContentCell *)currentObject;

                break;
            }
        }
    }

}
else if (title == @"Items" || title == @"Favorite Items")
{
    CellIdentifier = @"";
    ItemCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"ItemCell" owner:self options:nil];

        for (id currentObject in objects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (ItemCell *)currentObject;

                break;
            }
        }
    }

}
else if (title == @"Moves" || title == @"Favorite Moves")
{
    CellIdentifier = @"";
    MoveCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"MoveCell" owner:self options:nil];

        for (id currentObject in objects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (MoveCell *)currentObject;

                break;
            }
        }
    }

}

cell.imageView.image = [UIImage imageNamed:[[self.theData objectAtIndex:indexPath.row] objectForKey:@"image"]];
cell.contentName.text = [[self.theData objectAtIndex:indexPath.row] objectForKey:@"name"];

return cell;

}

于 2012-11-09T06:14:28.717 に答える