UITableViewCell с изображением справа?

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


person Oliver GL    schedule 23.04.2009    source источник


Ответы (11)


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

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"foo.png"]];
cell.accessoryView = imageView;
[imageView release];
person Alex Wayne    schedule 23.04.2009
comment
Будет ли изменение вида аксессуара перезаписывать индикатор раскрытия? - person Oliver GL; 24.04.2009
comment
Да, это было бы. Если вы хотите этого, вам нужно вручную добавить UIImageView в свою ячейку при создании. Или создайте подкласс для вашей специальной ячейки таблицы, который прекрасно все это обертывает для вас. - person Alex Wayne; 24.04.2009
comment
В методе UIImage есть небольшая опечатка: должно быть написано [UIImage imageNamed:@foo.png] - person arooaroo; 17.06.2011
comment
Извините за пробуждение этой темы, но это не сработало вне стартовой линии, мне пришлось добавить [imageView sizeToFit]; перед выпуском и после установки свойства accessorview, надеюсь, это поможет :) - person mister koz; 31.10.2011
comment
Применяя преобразование к contentView, вы можете поместить imageView справа. Вам также необходимо применить преобразование, чтобы перевернуть изображение и любые метки обратно. - person TomSwift; 24.07.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 справа. Обратите внимание, что вам нужно перевернуть imageView и любые текстовые метки, иначе они сами будут зеркально отражены! Это решение сохраняет дополнительный вид справа.

person TomSwift    schedule 24.07.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!
}
person Zorayr    schedule 25.04.2015

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

  1. Чтобы использовать аксессуарView.
cell.accessoryView = UIImageView(image: UIImage(named: "imageName"))
cell.accessoryView.frame = CGRectMake(0, 0, 22, 22)
  1. Если вы хотите иметь правильное изображение + accessorView, вы можете добавить выход UIImageView в ContentView (пример имени: rightImage) и изменить цвет фона textLabel на Clear.
cell.rightImage.image = UIImage(named: "imageName")
cell.textLabel.backgroundColor = UIColor.clearColor()
person gerram    schedule 30.07.2015

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

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

Создайте подкласс 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
person Camsoft    schedule 17.04.2012

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

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

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

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

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];
}

и установите изображение согласно вашему требованию

ячейка.изображениеVw.img ....

person iCoder    schedule 12.07.2012

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

person user2205998    schedule 22.07.2013

Этот 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"];
}
person user283846    schedule 01.03.2010
comment
Не относится к вопросу? - person Alasdair Allan; 26.05.2011
comment
OP уже понимает, как добавить изображение, используя представление изображения ячейки, которое показывает весь этот фрагмент. Вопрос в том, как расположить изображение так, чтобы оно появлялось справа. - person arooaroo; 17.06.2011

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

person samthui7    schedule 14.07.2015

Есть способ установить 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()}
person EranKT    schedule 18.01.2018