web-dev-qa-db-fra.com

UITableViewCell avec image à droite?

Existe-t-il un moyen de définir l'image UITableViewCell.image à afficher sur le côté droit de la cellule au lieu de la gauche? Ou devrai-je ajouter une UIImageView distincte sur le côté droit de la disposition des cellules?

45
Oliver GL

Non. Mais vous pouvez facilement ajouter une vue d'image en tant que vue accessoire à une cellule de tableau pour le même effet.

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

Pour les cas simples, vous pouvez le faire:

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

Cela inversera (reflétera) la vue du contenu en plaçant n'importe quelle imageView sur la droite. Notez que vous devez également retourner l'imageView et toutes les étiquettes de texte, sinon elles seraient elles-mêmes reflétées! Cette solution préserve la vue des accessoires sur la droite.

10
TomSwift

Voici un exemple dans Swift avec l'approche d'utiliser 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!
}
6
Zorayr

Si vous ne voulez pas créer une cellule personnalisée et que vous travaillerez avec une cellule standard, vous avez au moins deux façons:

  1. Pour utiliser accessoryView.
cell.accessoryView = UIImageView(image: UIImage(named: "imageName"))
cell.accessoryView.frame = CGRectMake(0, 0, 22, 22)
  1. Si vous voulez avoir la bonne image + accessoireView, vous pouvez ajouter la sortie UIImageView à ContentView (exemple de nom: rightImage) et changer la couleur d'arrière-plan de textLabel en Clear.
cell.rightImage.image = UIImage(named: "imageName")
cell.textLabel.backgroundColor = UIColor.clearColor()
5
gerram

Sous-classe UITableViewCell et remplacez layoutSubviews puis ajustez simplement les cadres des vues self.textLabel, self.detailTextLabel et self.imageView.

Voici à quoi cela pourrait ressembler dans le code:

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

dans Swift et Swift4, nous pouvons utiliser ceci:

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

Vous pouvez redimensionner l'image dans la vue accessoire en appelant la méthode setFrame de la vue image comme ceci: [imageView setFrame: CGRectMake (0, 0, 35.0, 35.0)];

0
user2205998

Ce Soln est pour ajouter une image différente dans chaque cellule .... Juste un essai

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

Pour ajouter une image @ côté droit dans la cellule, je vous suggère de créer une cellule personnalisée avec imageview sur le côté droit, cela vous sera très utile. et ajoutez une vue vide pour lier cette plume à la classe customcell.

Maintenant, dans le fichier nib de votre cellule, supprimez la vue, ajoutez tableViewcell et dans cette cellule, faites glisser et déposez une imageView sur le côté droit.

Maintenant, allez dans la classe de TableViewCell, dites DemoCell, créez une sortie et définissez-la avec l'imageview dans la pointe de la nappe

Maintenant, dans la méthode cellforrowatindexpath de tableview, référencez votre cellule et utilisez-la avec le nom de la nib comme ceci

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

et définissez l'image selon vos besoins

cell.imageVw.img ....

0
iCoder

Il n'est pas nécessaire de créer votre propre image, modifiez simplement cell.tintColor.

0
samthui7

Il existe un moyen de définir le position par programme. Voici la version Swift de la solution:

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)

Cela positionnera votre image sur le côté droit de la cellule. Cette solution ajuste automatiquement la position en fonction de la taille de l'écran. Le seul inconvénient est que lorsque vous faites pivoter l'appareil, vous devez recharger vos données, mais vous pouvez simplement override dans votre classe UITableView la méthode d'écoute didRotate:

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