iphone - UITableViewCell con imagen a la derecha?
objective-c uiimageview (11)
Aquí hay un ejemplo en Swift con el enfoque de usar 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!
}
¿Hay alguna manera de configurar el UITableViewCell.image para que se muestre en el lado derecho de la celda en lugar de en el izquierdo? ¿O tendré que agregar un UIImageView separado en el lado derecho del diseño de la celda?
En swift3 y swift4 , podemos usar esto:
cell.accessoryView = UIImageView(image:UIImage(named:"imageNmae")!)
Este Soln es para agregar una imagen diferente en cada celda ... Solo un intento
// 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"];
}
Hay una manera de establecer la position
programáticamente. Aquí está la versión Swift
de la solución:
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)
Esto posicionará su imagen en el lado derecho de la celda. Esta solución está ajustando automáticamente la posición de acuerdo con el tamaño de la pantalla. El único inconveniente es cuando gira el dispositivo que necesita para volver a cargar sus datos, pero puede override
en su clase didRotate
método didRotate
listener:
override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {
_tableView.reloadData()}
No es necesario crear su propia imagen, solo edite cell.tintColor
.
No. Pero puede agregar fácilmente una vista de imagen como vista accesoria a una celda de tabla para obtener el mismo efecto.
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"foo.png"]];
cell.accessoryView = imageView;
[imageView release];
Para agregar imagen @ lado derecho en la celda, le sugiero que cree una celda personalizada con vista de imagen en el lado derecho, será muy útil para usted. y agregue una vista vacía para vincular esta punta con la clase customcell.
Ahora, en el archivo de punta de su celda, elimine la vista, agregue tableViewcell y en esa celda arrastre y suelte un imageView al lado derecho.
Ahora vaya a la clase de TableViewCell, diga DemoCell, cree una salida y configúrelo con la vista de la imagen en la punta de la tabla
Ahora, en el método cellforrowatindexpath de tableview, haga referencia a su celda y úsela con el nombre de punta como este
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];
}
y establecer la imagen según su requisito
cell.imageVw.img ....
Para casos simples puedes hacer esto:
cell.contentView.transform = CGAffineTransformMakeScale(-1,1);
cell.imageView.transform = CGAffineTransformMakeScale(-1,1);
cell.textLabel.transform = CGAffineTransformMakeScale(-1,1);
cell.textLabel.textAlignment = NSTextAlignmentRight; // optional
Esto volteará (reflejará) la vista de contenido colocando cualquier imageView a la derecha. Tenga en cuenta que debe voltear el imageView y cualquier etiqueta de texto, ya que de lo contrario ¡se reflejarían! Esta solución conserva la vista de accesorios a la derecha.
Puede cambiar el tamaño de la imagen en la vista de accesorios llamando al método setFrame de la vista de imagen de la siguiente manera: [imageView setFrame: CGRectMake (0, 0, 35.0, 35.0)];
Si no desea crear una celda personalizada y funciona con la estándar, tiene como mínimo dos formas:
- Para usar accessoryView.
cell.accessoryView = UIImageView(image: UIImage(named: "imageName"))
cell.accessoryView.frame = CGRectMake(0, 0, 22, 22)
- Si desea tener la imagen correcta + accessView, puede agregar la salida UIImageView a ContentView (nombre de ejemplo: rightImage) y cambiar el color de fondo de textLabel como Clear.
cell.rightImage.image = UIImage(named: "imageName")
cell.textLabel.backgroundColor = UIColor.clearColor()
Subclass UITableViewCell y anular layoutSubviews y luego simplemente ajustar los marcos de las vistas self.textLabel, self.detailTextLabel y self.imageView.
Así es como se vería en el código:
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