web-dev-qa-db-ja.com

右側に画像があるUITableViewCell?

UITableViewCell.imageを左ではなくセルの右側に表示するように設定する方法はありますか?または、セルレイアウトの右側に別のUIImageViewを追加する必要がありますか?

45
Oliver GL

いいえ。ただし、同じ効果を得るために、画像ビューをアクセサリビューとしてテーブルセルに簡単に追加できます。

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"foo.png"]];
cell.accessoryView = imageView;
[imageView release];
79
Alex Wayne

簡単な場合には、これを行うことができます:

cell.contentView.transform = CGAffineTransformMakeScale(-1,1);
cell.imageView.transform = CGAffineTransformMakeScale(-1,1);
cell.textLabel.transform = CGAffineTransformMakeScale(-1,1);
cell.textLabel.textAlignment = NSTextAlignmentRight; // optional

これにより、コンテンツビューが反転(ミラー)され、imageViewが右側に配置されます。 imageViewとテキストラベルも反転する必要があることに注意してください。反転しないと、それら自体がミラーリングされます。このソリューションは、右側のアクセサリビューを保持します。

10
TomSwift

accessoryViewを使用するアプローチでのSwiftの例を次に示します。

private let reuseIdentifier: String = "your-cell-reuse-id"

// MARK: UITableViewDataSource

func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  var cell : UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier) as? UITableViewCell
  if (cell == nil) {
    cell = UITableViewCell(style:UITableViewCellStyle.Subtitle, reuseIdentifier:reuseIdentifier)
  }

  cell!.textLabel!.text = "Hello"
  cell!.detailTextLabel!.text = "World"
  cell!.accessoryView = UIImageView(image:UIImage(named:"YourImageName")!)
  return cell!
}
6
Zorayr

カスタムセルを作成したくなく、標準セルで動作する場合、少なくとも2つの方法があります。

  1. AccessoriesViewを使用するには。
cell.accessoryView = UIImageView(image: UIImage(named: "imageName"))
cell.accessoryView.frame = CGRectMake(0, 0, 22, 22)
  1. 適切な画像とaccessoryViewが必要な場合は、UIImageViewアウトレットをContentViewに追加し(例:rightImage)、textLabelの背景色をClearとして変更できます。
cell.rightImage.image = UIImage(named: "imageName")
cell.textLabel.backgroundColor = UIColor.clearColor()
5
gerram

UITableViewCellをサブクラス化し、layoutSubviewsをオーバーライドしてから、self.textLabel、self.detailTextLabel、self.imageViewビューのフレームを調整するだけです。

コードでは次のようになります。

MYTableViewCell.h

#import <UIKit/UIKit.h>

@interface MYTableViewCell : UITableViewCell
@end

MYTableViewCell.m

#import "MYTableViewCell.h"

@implementation MYTableViewCell

- (void)layoutSubviews
{
    [super layoutSubviews];
    if (self.imageView.image) {
        self.imageView.frame = CGRectMake(CGRectGetWidth(self.contentView.bounds) - 32 - 8,
                                          CGRectGetMidY(self.contentView.bounds) - 16.0f,
                                          32,
                                          32);
        CGRect frame = self.textLabel.frame;
        frame.Origin.x = 8;
        self.textLabel.frame = frame;
        frame = self.detailTextLabel.frame;
        frame.Origin.x = 8;
        self.detailTextLabel.frame = frame;
    }
}

@end
2
Camsoft

SwiftおよびSwift4では、これを使用できます:

cell.accessoryView = UIImageView(image:UIImage(named:"imageNmae")!)
1
Mohsen mokhtari

次のようにimageviewのsetFrameメソッドを呼び出すことにより、accessoryviewの画像のサイズを変更できます。[imageView setFrame:CGRectMake(0、0、35.0、35.0)];

0
user2205998

このSolnは、各セルに異なる画像を追加するためのものです。

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

if(indexPath.row == 0) {
    cell.image = [UIImage imageNamed:@"image.png"];
}

else if (indexPath.row == 1) {
    cell.image = [UIImage imageNamed:@"image1.png"];
}
0
user283846

画像をセルの右側に追加するには、右側に画像ビューを持つカスタムセルを作成することをお勧めします。これは非常に便利です。このニブをcustomcellクラスにリンクする空のビューを追加します。

次に、セルのnibファイルでビューを削除し、tableViewcellを追加し、そのセルでimageViewを右側にドラッグアンドドロップします。

次に、TableViewCellクラスのDemoCellに移動して、アウトレットを作成し、テーブルセルのペン先のimageviewで設定します

さて、tableviewのcellforrowatindexpathメソッドでは、セルを参照し、このようなnib名で使用します

static NSString *CellIdentifier = @"Cell";
DemoCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[SettingCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell = [[[NSBundle mainBundle]loadNibNamed:@"DemoCell" owner:self options:nil] lastObject];
}

そして、あなたの要件に従って画像を設定します

cell.imageVw.img ....

0
iCoder

独自の画像を作成する必要はありません。ただcell.tintColor

0
samthui7

positionをプログラムで設定する方法があります。ソリューションのSwiftバージョンは次のとおりです。

image.frame = CGRect.init(
x: self.view.frame.width - image.frame.width*1.1,
y: image.frame.Origin.y,
width: image.frame.width,
height: image.frame.height)

これにより、セルの右側に画像が配置されます。このソリューションは、画面サイズに応じて自動的に位置を調整します。唯一の欠点は、データをリロードする必要があるデバイスを回転させるときですが、overrideクラスのUITableViewクラスでdidRotateリスナーメソッドを使用するだけです:

override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {
    _tableView.reloadData()}
0
EranKT