UITableViewCellでアクセサリの開示画像をカスタマイズするにはどうすればよいですか?
-
03-07-2019 - |
質問
UITableViewでカスタムバージョンの標準開示アクセサリイメージを使用したいと思います。これどうやってするの?この基本的なことにはUITableViewCellのサブクラス化が必要ないことを望んでいます。
解決
カスタムビューを作成し、 UITableViewCell
オブジェクトの accessoryView
プロパティに割り当てる必要があります。次のようなもの:
myCell.accessoryView = [[ UIImageView alloc ]
initWithImage:[UIImage imageNamed:@"Something" ]];
他のヒント
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"];
cell.accessoryView =[[[UIImageView alloc] initWithImage:indicatorImage] autorelease];
return cell;
}
これは上記のヘルプコードで行います
Gregと同じ問題に遭遇しました-アクセサリビューは追跡しません(UIImageViewを使用している場合)
このように解決しました:
UIImage * image = [ UIImage imageNamed:@"disclosure-button-grey.png" ] ;
UIControl * c = [ [ UIControl alloc ] initWithFrame:(CGRect){ CGPointZero, image.size } ] ;
c.layer.contents = (id)image.CGImage ;
[ c addTarget:self action:@selector( accessoryTapped: ) forControlEvents:UIControlEventTouchUpInside ] ;
cell.accessoryView = c ;
[ c release ] ;
Appleの素晴らしい例があります。 UIControl
を使用して、このようなアクセサリビューのカスタマイズを実現する方法を示します。
UIControlで-(void)drawRect:(CGRect)rect
をオーバーライドするのは最も簡単な方法ではありませんが、素敵なアクセサリビューのスタイルを柔軟に設定できます。
次のようにします:
UIImageView *chevronImgVw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chevron_accessory_vw_img.png"]];
chevronImgVw.frame = CGRectMake(cell.accessoryView.frame.origin.x, cell.accessoryView.frame.origin.y, 10, 20);
cell.accessoryView = chevronImgVw;
投票する前にこれを試してください!現時点では、2つのアップ投票と2つのダウン投票があるためです!
上記のコードを試してみましたが、おそらくこの投稿が古くなったために機能していないようです。カスタマイズされたアクセサリビューを提供する行を破棄します。
[cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]];
誰かがこれが役に立つことを願っています。
注:カスタムセルをtag:0に設定しないでください。このタグは、textLabelビュー用に予約されています。 Xcode Storyboardでタグを設定する場合、カスタムビュー/ラベルのタグを1以上に設定する必要があります。
Appleの例に注意してください:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
UILabel *label;
label = (UILabel *)[cell viewWithTag:1];
label.text = [NSString stringWithFormat:@"%d", indexPath.row];
label = (UILabel *)[cell viewWithTag:2];
label.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row];
return cell;
}
所属していません StackOverflow