una significa que para imagenes imagen como atributos atributo agregar ios uitableview swift xcode6 uitableviewrowaction

ios - significa - seo imagenes wordpress



Imagen UITableViewRowAction para el título (7)

Hice una UITableViewRowAction personalizada. Ahora me gustaría agregar una imagen en lugar del texto. Sé que es posible, pero no sé cómo hacerlo. ¿Alguien de ustedes sabe cómo hacer esto en Swift y me gustaría ayudarme? ¡Gracias por tus respuestas!


Acabo de implementar una mejor versión de share 1. En la mayoría de los casos, la altura de la celda y el ancho de la parte deslizante personalizada son diferentes, debes calcular esto en tu función 2. La imagen puede tener diferentes tamaños que el cuadrado, por lo que debes calcular proporciones no solo para la altura. Entonces, codifique con mis correcciones

func setIcon(iconImage: UIImage, backColor: UIColor, cellHeight: CGFloat, customSwipPartWidth: CGFloat, iconSizePercentage: CGFloat) { let iconWidth = customSwipPartWidth * iconSizePercentage let iconHeight = iconImage.size.height / iconImage.size.width * iconWidth let marginY = (cellHeight - iconHeight) / 2 as CGFloat let marginX = (customSwipPartWidth - iconWidth) / 2 as CGFloat UIGraphicsBeginImageContextWithOptions(CGSize(width: customSwipPartWidth, height: cellHeight), false, 0) let context = UIGraphicsGetCurrentContext() backColor.setFill() context!.fill(CGRect(x:0, y:0, width:customSwipPartWidth, height:cellHeight)) iconImage.draw(in: CGRect(x: marginX, y: marginY, width: iconWidth, height: iconHeight)) let actionImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); self.backgroundColor = UIColor.init(patternImage: actionImage!) }


El problema con el enfoque básico del patrón de color es que su imagen debe ser del mismo tamaño que el botón de acción, o al menos tener un fondo más plano en la parte inferior para evitar la repetición de la imagen (aunque esté anclada en arriba, que no es realmente agradable).

Tuve que lidiar con celdas de altura dinámica, así que implementé lo siguiente:

- (UIColor *)backgroundImageForActionAtIndexPath:(NSIndexPath *)indexPath withImage:(UIImage *)image tintColor:(UIColor *)tintColor backgroundColor:(UIColor *)backgrounfColor expectedWith:(CGFloat)width { // CGRect cellFrame = [self.tableView rectForRowAtIndexPath:indexPath]; CGSize expectedSize = CGSizeMake(width, cellFrame.size.height); UIGraphicsBeginImageContextWithOptions(expectedSize, NO, 0.0); CGContextRef ctx = UIGraphicsGetCurrentContext (); if (ctx) { // set the background CGContextSetFillColorWithColor(ctx, backgrounfColor.CGColor); CGRect fillRect = CGRectZero; fillRect.size = expectedSize; CGContextFillRect(ctx, fillRect); // put the image CGContextSetFillColorWithColor(ctx, tintColor.CGColor); CGRect rect = CGRectMake((expectedSize.width - image.size.width) / 2., (expectedSize.height - image.size.height) / 2., image.size.width, image.size.height); [image drawInRect:rect]; } UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return [UIColor colorWithPatternImage:newImage];

}

Aún debe establecer el ancho esperado para que coincida con la etiqueta vacía que puso en el título de la acción. eg: @ "" -> 64.f

Como puede ver con este enfoque, puede establecer el fondo del botón y el color del tinte en el código y no en la obra de arte en sí.


Hice esta categoría simple UITableViewRowAction, para establecer el icono de mis acciones. Puede configurar la imagen, el color de fondo, la altura de la celda (para administrar las celdas dinámicas) y el tamaño del icono en porcentaje.

extension UITableViewRowAction { func setIcon(iconImage: UIImage, backColor: UIColor, cellHeight: CGFloat, iconSizePercentage: CGFloat) { let iconHeight = cellHeight * iconSizePercentage let margin = (cellHeight - iconHeight) / 2 as CGFloat UIGraphicsBeginImageContextWithOptions(CGSize(width: cellHeight, height: cellHeight), false, 0) let context = UIGraphicsGetCurrentContext() backColor.setFill() context!.fill(CGRect(x:0, y:0, width:cellHeight, height:cellHeight)) iconImage.draw(in: CGRect(x: margin, y: margin, width: iconHeight, height: iconHeight)) let actionImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); self.backgroundColor = UIColor.init(patternImage: actionImage!) } }


Necesita configurar UIImage a backgroundColor de acción de fila, concretamente por:

Rápido:

UIColor(patternImage: UIImage(named: "IMAGE_NAME"))

C objetivo:

[UIColor colorWithPatternImage:[UIImage imageNamed:@"IMAGE_NAME"]];


Swift 4 (iOS 11+):

iOS 11 ahora admite imágenes (solo) para mostrar en los botones de acción. Simplemente tiene que inicializar un objeto UISwipeActionsConfiguration en su objeto de delegación de vista de tabla:

extension MyTableViewController:UITableViewDelegate { func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let deleteAction = UIContextualAction(style: .normal, title: nil, handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in debugPrint("Delete tapped") success(true) }) deleteAction.image = UIImage(named: "icon_delete.png") deleteAction.backgroundColor = UIColor.red return UISwipeActionsConfiguration(actions: [deleteAction]) }

}


class TableViewRowAction: UITableViewRowAction { var image: UIImage? func _setButton(button: UIButton) { if let image = image, let titleLabel = button.titleLabel { let labelString = NSString(string: titleLabel.text!) let titleSize = labelString.sizeWithAttributes([NSFontAttributeName: titleLabel.font]) button.tintColor = UIColor.whiteColor() button.setImage(image.imageWithRenderingMode(.AlwaysTemplate), forState: .Normal) button.imageEdgeInsets.right = -titleSize.width } } } func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { let delete = TableViewRowAction(style: UITableViewRowActionStyle.Default, title: " ") { action, indexPath in } delete.image = UIImage(named: "trashImg") let sharing = TableViewRowAction(style: UITableViewRowActionStyle.Default, title: " ") { action, indexPath in } sharing.backgroundColor = UIColor.lightGrayColor() sharing.image = UIImage(named: "sharingImg") return [delete, sharing] }


delActions.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"delete.png"]];