1

UIAccessoryView にカスタム イメージを使用しようとしていますが、うまく動作しないようです。テーブル ビューが起動しても、どの画像も更新されません。私のコードは次のとおりです。

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    MenuItem *menuItem = [self.menuItems objectAtIndex:indexPath.row];

    if (!tableViewCell)
    {
        tableViewCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
        tableViewCell.textLabel.font = [UIFont fontWithName: CaptionDistractionBodyFontName size: 15];
        imageView.contentMode = UIViewContentModeCenter;
        tableViewCell.accessoryView = [[UIImageView alloc] initWithImage:nil];
    }

    tableViewCell.textLabel.text = menuItem.name;

    UIImageView *imageView = (UIImageView*)tableViewCell.accessoryView;
    imageView.image = nil;

    if (menuItem.type == MenuItemTypeCheckMark)
    {
        if (menuItem.isCheckMarked)
        {
            imageView.image = [UIImage imageNamed:@"DisclosureViewX"];
        }
    }
    else if (menuItem.type == MenuItemTypeSubmenu)
    {
        imageView.image = [UIImage imageNamed:@"DisclosureViewArrow"];
    }

    return tableViewCell;
}

私は多くの異なることを試しましsetNeedsLayoutた. 自分でまったく新しいアクセサリ ビューを作成する以外に、これを行う正しい方法は何ですか?UITableViewCelllayoutSubviews

4

3 に答える 3

2

最初に を画像で設定したためUIImageViewnil画像ビューのフレームの幅と高さはゼロです。実際の画像を割り当てた後、フレームをリセットする必要があります。

imageView.image = [UIImage imageNamed:@"DisclosureViewX"];
imageView.frame = CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height);

編集:

実際には[imageView sizeToFit]、を設定する代わりに画像を設定した後に呼び出す方が簡単frameです。

于 2013-09-06T20:02:07.190 に答える
1

やってみる

tableViewCell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"DisclosureViewX"]];
于 2013-09-06T20:01:55.453 に答える