2009-04-23 8 views
42

C'è un modo per impostare UITableViewCell.image per visualizzare sul lato destro della cella anziché a sinistra? O dovrò aggiungere un UIImageView separato sul lato destro del layout della cella?UITableViewCell con immagine a destra?

risposta

74

No. Ma è possibile aggiungere facilmente una vista immagine come la vista accessoria a una cella di tabella per lo stesso effetto.

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

Cambiando la vista accessorio, quindi sovrascrivere l'indicatore di divulgazione? –

+0

Sì, lo farebbe. Se lo desideri, devi aggiungere manualmente UIImageView alla tua cella al momento della creazione. Oppure crea una sottoclasse per la tua speciale cella di tabella che avvolge tutto ciò per te. –

+0

C'è un piccolo refuso nel metodo UIImage: dovrebbe dire [UIImage imageNamed: @ "foo.png"] – arooaroo

0

Questo Soln è per l'aggiunta di un'immagine diversa in ogni cella .... Basta una Prova

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

Non pertinente alla domanda? –

+0

L'OP comprende già come aggiungere un'immagine usando la vista dell'immagine della cella, che è tutto ciò che mostra questo frammento. Come posizionare un'immagine per apparire sul lato destro è la domanda. – arooaroo

2

sottoclasse UITableViewCell e override layoutSubviews e poi basta regolare i fotogrammi del self.textLabel, viste self.detailTextLabel e self.imageView.

questo è come potrebbe apparire come nel codice:

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 
0

per aggiungere un'immagine @ lato destro nella cella, vorrei suggerire per creare una cella personalizzata con imageview sul lato destro, sarà molto utile per te. e aggiungi una vista vuota per collegare questo pennino con la classe customcell.

Ora nel file del pennino della cella rimuovere la vista, aggiungere tableViewcell e in quella cella trascinare & rilasciare un imageView a destra.

Ora vai alla classe del TableViewCell dicono DemoCell, creare una presa di corrente e impostare con l'imageview nel pennino della TableCell

Ora, nel metodo cellForRowAtIndexPath del Tableview riferimento tuo cellulare e utilizzarlo con il nome pennino come questo

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

e impostare l'immagine secondo il vostro requisito

cell.imageVw.img ....

0

È possibile RESI ze image in accessoryview chiamando il metodo setFrame di imageview in questo modo: [imageView setFrame: CGRectMake (0, 0, 35.0, 35.0)];

5

Ecco un esempio in Swift con l'approccio di utilizzare 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! 
} 
0

E 'necessario creare una propria immagine, è sufficiente modificare cell.tintColor.

10

Per i casi semplici si può fare questo:

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

Ciò capovolgere (specchio) alla vista del contenuto porre alcuna IMAGEVIEW sulla destra. Si noti che è necessario capovolgere l'imageView e le eventuali etichette di testo anche in caso contrario esse sarebbero specchiate! Questa soluzione conserva la vista accessoria a destra.

4

Se non si vuole fare una cella personalizzato e lavorerà con un unico standard, è necessario come minimo due modi:

  1. da usare accessoryView.
cell.accessoryView = UIImageView(image: UIImage(named: "imageName")) 
cell.accessoryView.frame = CGRectMake(0, 0, 22, 22) 
  1. Se si desidera avere l'immagine a destra + accessoryView, quindi è possibile aggiungere presa UIImageView a contentView (nome Esempio: rightImage) e cambiare il colore di textLabel di sfondo come Chiaro.
cell.rightImage.image = UIImage(named: "imageName") 
cell.textLabel.backgroundColor = UIColor.clearColor() 
0

C'è un modo per impostare il position di programmazione. Ecco la versione Swift della soluzione:

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) 

Questo posizionerà la vostra immagine sul lato destro della cella. Questa soluzione sta regolando automaticamente la posizione in base alle dimensioni dello schermo. L'unico lato negativo è quando si ruota il dispositivo è necessario ricaricare i dati, ma si può solo override nella classe UITableView il metodo didRotate ascoltatore:

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

in swift3 e swift4, possiamo utilizzare questo:

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