UITableViewCell с изображением справа? - PullRequest
45 голосов
/ 23 апреля 2009

Есть ли способ настроить отображение изображения UITableViewCell.i справа от ячейки, а не слева? Или мне нужно будет добавить отдельный UIImageView на правой стороне макета ячейки?

Ответы [ 11 ]

79 голосов
/ 23 апреля 2009

Нет. Но вы можете легко добавить представление изображения как вспомогательное представление к ячейке таблицы для того же эффекта.

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"foo.png"]];
cell.accessoryView = imageView;
[imageView release];
10 голосов
/ 24 июля 2015

Для простых случаев вы можете сделать это:

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

Это перевернет (отразит) представление содержимого, поместив любое изображение в правой части экрана. Обратите внимание, что вы должны перевернуть imageView и любые текстовые метки, иначе они сами будут отражены! Это решение сохраняет вид аксессуара справа.

6 голосов
/ 26 апреля 2015

Вот пример в Swift с подходом использования accessoryView:

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!
}
5 голосов
/ 30 июля 2015

Если вы не хотите создавать собственную ячейку и будете работать со стандартной, у вас есть как минимум два способа:

  1. Для использования accessoryView.
cell.accessoryView = UIImageView(image: UIImage(named: "imageName"))
cell.accessoryView.frame = CGRectMake(0, 0, 22, 22)
  1. Если вы хотите иметь правильное изображение + accessoryView, вы можете добавить выход UIImageView в ContentView (пример name: rightImage) и изменить цвет фона textLabel на Clear.
cell.rightImage.image = UIImage(named: "imageName")
cell.textLabel.backgroundColor = UIColor.clearColor()
2 голосов
/ 17 апреля 2012

Подкласс 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
1 голос
/ 13 февраля 2018

in swift3 и swift4 , мы можем использовать это:

cell.accessoryView = UIImageView(image:UIImage(named:"imageNmae")!)
0 голосов
/ 19 января 2018

Есть способ установить 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 голосов
/ 14 июля 2015

Нет необходимости создавать собственное изображение, просто отредактируйте cell.tintColor.

0 голосов
/ 22 июля 2013

Вы можете изменить размер изображения в дополнительном виде, вызвав метод setFrame для вида изображения следующим образом: [imageView setFrame: CGRectMake (0, 0, 35.0, 35.0)];

0 голосов
/ 12 июля 2012

Чтобы добавить изображение @ Правая сторона в ячейке, я бы предложил вам создать пользовательскую ячейку с изображением справа, это будет очень полезно для вас. и добавьте пустое представление, чтобы связать этот кончик с классом customcell.

Теперь в nib-файле вашей ячейки удалите представление, добавьте tableViewcell и в эту ячейку перетащите изображение в правую сторону.

Теперь перейдите к классу TableViewCell, скажем, DemoCell, создайте розетку и установите его с изображением в кончике tablecell

Теперь, в методе cellforrowatindexpath таблицы view сделайте ссылку на вашу ячейку и используйте ее с именем пера, как это

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 ....

...