Tôi đang tìm cách thêm chức năng tương tự vào ứng dụng của mình và sau khi trải qua rất nhiều hướng dẫn khác nhau ( raywenderlich là giải pháp DIY tốt nhất), tôi phát hiện ra rằng Apple có UITableViewRowAction
lớp riêng , rất tiện dụng.
Bạn phải thay đổi phương thức potpoint của Tableview thành:
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]
}
Bạn có thể tìm hiểu thêm về điều này trên Trang web này . Tài liệu riêng của Apple thực sự hữu ích cho việc thay đổi màu nền:
Màu nền của nút hành động.
Khai báo MỤC TIÊU-C @property (không gây dị ứng, sao chép) UIColor * nềnColor Thảo luận Sử dụng thuộc tính này để chỉ định màu nền cho nút của bạn. Nếu bạn không chỉ định giá trị cho thuộc tính này, UIKit sẽ chỉ định màu mặc định dựa trên giá trị trong thuộc tính kiểu.
Tính khả dụng Có sẵn trong iOS 8.0 trở lên.
Nếu bạn muốn thay đổi phông chữ của nút, thì khó hơn một chút. Tôi đã thấy một bài viết khác trên SO. Vì mục đích cung cấp mã cũng như liên kết, đây là mã họ đã sử dụng ở đó. Bạn sẽ phải thay đổi giao diện của nút. Bạn sẽ phải tạo một tham chiếu cụ thể cho tableviewcell, nếu không, bạn sẽ thay đổi giao diện của nút trong suốt ứng dụng của mình (Tôi không muốn điều đó, nhưng bạn có thể, tôi không biết :))
Mục tiêu 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];
}
Nhanh:
//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])
Đây là phiên bản dễ nhất và được sắp xếp hợp lý nhất IMHO. Hy vọng nó giúp.
Cập nhật: Đây là phiên bản Swift 3.0:
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]
}