ฉันต้องการเพิ่มฟังก์ชันการทำงานเดียวกันกับแอพของฉันและหลังจากผ่านแบบฝึกหัดต่างๆมากมาย ( raywenderlichเป็นโซลูชัน DIY ที่ดีที่สุด) ฉันพบว่า Apple มีUITableViewRowAction
คลาสของตัวเองซึ่งมีประโยชน์มาก
คุณต้องเปลี่ยนวิธีการจุดหม้อไอน้ำ Tableview ของนี้:
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]
}
คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนี้ได้ในเว็บไซต์นี้ เอกสารของ Apple เป็นประโยชน์อย่างยิ่งสำหรับการเปลี่ยนสีพื้นหลัง:
สีพื้นหลังของปุ่มการกระทำ
การประกาศ OBJECTIVE-C @property (nonatomic, copy) UIColor * backgroundColor การสนทนาใช้คุณสมบัตินี้เพื่อระบุสีพื้นหลังสำหรับปุ่มของคุณ หากคุณไม่ได้ระบุค่าสำหรับคุณสมบัตินี้ UIKit จะกำหนดสีเริ่มต้นตามค่าในคุณสมบัติของสไตล์
มีให้บริการใน iOS 8.0 และใหม่กว่า
หากคุณต้องการเปลี่ยนแบบอักษรของปุ่มมันค่อนข้างยุ่งยากกว่านี้ ฉันเห็นโพสต์อื่นใน SO เพื่อประโยชน์ในการระบุรหัสรวมถึงลิงก์นี่คือรหัสที่ใช้ คุณต้องเปลี่ยนรูปลักษณ์ของปุ่ม คุณต้องทำการอ้างอิงเฉพาะกับ tableviewcell ไม่เช่นนั้นคุณจะเปลี่ยนลักษณะที่ปรากฏของปุ่มในแอพของคุณ (ฉันไม่ต้องการมัน แต่คุณอาจรู้ว่าฉันไม่รู้ :))
วัตถุประสงค์ 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];
}
สวิฟท์:
//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])
นี่เป็น IMHO ที่ง่ายที่สุดและเรียงกันแบบสตรีมมากที่สุด หวังว่ามันจะช่วย
อัปเดต: นี่คือเวอร์ชั่น 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]
}