ios - UITableViewRowAction Bild für Titel



swift xcode6 (5)

Das Problem mit dem grundlegenden Muster-Farb-Ansatz ist, dass Ihr Bild die gleiche Größe wie die Aktionsschaltfläche haben muss oder zumindest einen flacheren Hintergrund an der Unterseite haben muss, um die Bildwiederholung zu verhindern (obwohl es verankert ist) top, das ist nicht wirklich nett).

Ich musste mit Zellen mit dynamischer Höhe arbeiten, also habe ich Folgendes implementiert:

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

}

Sie müssen die expectedWidth immer noch so einstellen, dass sie der leeren Bezeichnung entspricht, die Sie in den Titel der Aktion eingegeben haben. zB: @ "" -> 64.f

Wie Sie bei diesem Ansatz sehen, können Sie den Hintergrund und die Tönungsfarbe der Schaltfläche im Code und nicht im eigentlichen Bild festlegen.

https://ffff65535.com

Ich habe eine benutzerdefinierte UITableViewRowAction erstellt. Jetzt möchte ich ein Bild anstelle des Textes hinzufügen. Ich weiß, dass es möglich ist, aber ich weiß nicht, wie es geht. Kennt jemand von euch das in Swift und möchte mir helfen? Danke für deine Antworten!


Ich habe diese einfache UITableViewRowAction-Kategorie erstellt, um das Symbol für meine Aktionen festzulegen. Sie können das Bild, die Hintergrundfarbe, die Zellenhöhe (um dynamische Zellen zu verwalten) und die Symbolgröße in Prozent einstellen.

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!)
  }
}

Sie müssen UIImage auf backgroundColor der Zeilenaktion setzen, konkret durch:

Schnell:

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

Ziel c:

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

Swift 4 (iOS 11+):

iOS 11 unterstützt jetzt nur Bilder, die in Aktionstasten angezeigt werden. Sie müssen lediglich ein UISwipeActionsConfiguration-Objekt in Ihrem Tabellenansichtsdelegatenobjekt initialisieren:

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

}


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




uitableviewrowaction