Ich wollte meiner App die gleiche Funktionalität hinzufügen, und nachdem ich so viele verschiedene Tutorials durchgesehen hatte ( raywenderlich ist die beste DIY-Lösung), fand ich heraus, dass Apple eine eigene UITableViewRowAction
Klasse hat, was sehr praktisch ist.
Sie müssen die Boilerpoint-Methode von Tableview folgendermaßen ändern:
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
// 1
var shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Share" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
// 2
let shareMenu = UIAlertController(title: nil, message: "Share using", preferredStyle: .ActionSheet)
let twitterAction = UIAlertAction(title: "Twitter", style: UIAlertActionStyle.Default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
shareMenu.addAction(twitterAction)
shareMenu.addAction(cancelAction)
self.presentViewController(shareMenu, animated: true, completion: nil)
})
// 3
var rateAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Rate" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
// 4
let rateMenu = UIAlertController(title: nil, message: "Rate this App", preferredStyle: .ActionSheet)
let appRateAction = UIAlertAction(title: "Rate", style: UIAlertActionStyle.Default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
rateMenu.addAction(appRateAction)
rateMenu.addAction(cancelAction)
self.presentViewController(rateMenu, animated: true, completion: nil)
})
// 5
return [shareAction,rateAction]
}
Weitere Informationen hierzu finden Sie auf dieser Website . Apples eigene Dokumentation ist sehr nützlich, um die Hintergrundfarbe zu ändern:
Die Hintergrundfarbe der Aktionsschaltfläche.
Deklaration ZIEL-C @property (nichtatomar, kopiert) UIColor * backgroundColor Diskussion Verwenden Sie diese Eigenschaft, um die Hintergrundfarbe für Ihre Schaltfläche anzugeben. Wenn Sie für diese Eigenschaft keinen Wert angeben, weist UIKit basierend auf dem Wert in der Stileigenschaft eine Standardfarbe zu.
Verfügbarkeit Verfügbar in iOS 8.0 und höher.
Wenn Sie die Schriftart der Schaltfläche ändern möchten, ist dies etwas schwieriger. Ich habe einen anderen Beitrag auf SO gesehen. Um sowohl den Code als auch den Link bereitzustellen, ist hier der Code, den sie dort verwendet haben. Sie müssten das Erscheinungsbild der Schaltfläche ändern. Sie müssten einen spezifischen Verweis auf tableviewcell machen, sonst würden Sie das Erscheinungsbild der Schaltfläche in Ihrer App ändern (das wollte ich nicht, aber vielleicht, ich weiß nicht :))
Ziel c:
+ (void)setupDeleteRowActionStyleForUserCell {
UIFont *font = [UIFont fontWithName:@"AvenirNext-Regular" size:19];
NSDictionary *attributes = @{NSFontAttributeName: font,
NSForegroundColorAttributeName: [UIColor whiteColor]};
NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString: @"DELETE"
attributes: attributes];
/*
* We include UIView in the containment hierarchy because there is another button in UserCell that is a direct descendant of UserCell that we don't want this to affect.
*/
[[UIButton appearanceWhenContainedIn:[UIView class], [UserCell class], nil] setAttributedTitle: attributedTitle
forState: UIControlStateNormal];
}
Schnell:
//create your attributes however you want to
let attributes = [NSFontAttributeName: UIFont.systemFontOfSize(UIFont.systemFontSize())] as Dictionary!
//Add more view controller types in the []
UIButton.appearanceWhenContainedInInstancesOfClasses([ViewController.self])
Dies ist meiner Meinung nach die einfachste und optimierteste Version. Ich hoffe es hilft.
Update: Hier ist die Swift 3.0-Version:
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
var shareAction:UITableViewRowAction = UITableViewRowAction(style: .default, title: "Share", handler: {(action, cellIndexpath) -> Void in
let shareMenu = UIAlertController(title: nil, message: "Share using", preferredStyle: .actionSheet)
let twitterAction = UIAlertAction(title: "Twitter", style: .default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
shareMenu.addAction(twitterAction)
shareMenu.addAction(cancelAction)
self.present(shareMenu,animated: true, completion: nil)
})
var rateAction:UITableViewRowAction = UITableViewRowAction(style: .default, title: "Rate" , handler: {(action, cellIndexpath) -> Void in
// 4
let rateMenu = UIAlertController(title: nil, message: "Rate this App", preferredStyle: .actionSheet)
let appRateAction = UIAlertAction(title: "Rate", style: .default, handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
rateMenu.addAction(appRateAction)
rateMenu.addAction(cancelAction)
self.present(rateMenu, animated: true, completion: nil)
})
// 5
return [shareAction,rateAction]
}