自定义UIActionSheet

如何自定义UIActionSheet如下所示:

在此处输入图像描述

此外,如果我自定义UIActionSheet ,是否有机会被拒绝?

如果你真的想做那样的事情,你可以放手一搏。 我不能保证它会得到Apple的批准,老实说,从UI和Apple HIG的角度来看,它不是推荐的。

请记住, UIActionSheet已被弃用,建议使用UIAlertControllerpreferredStyle.ActionSheet这样就是这个例子的用途。

 import UIKit class ViewController: UIViewController { override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) let controller = SwiftDemoAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) controller.addAction(UIAlertAction(title: "Reset to default", style: .Destructive, handler: nil)) controller.addAction(UIAlertAction(title: "Save", style: .Default, handler: nil)) self.presentViewController(controller, animated: true, completion: nil) } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } class SwiftDemoAlertController: UIAlertController, UITableViewDataSource { private var controller : UITableViewController override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { controller = UITableViewController(style: .Plain) super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) controller.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") controller.tableView.dataSource = self controller.tableView.addObserver(self, forKeyPath: "contentSize", options: [.Initial, .New], context: nil) self.setValue(controller, forKey: "contentViewController") } override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) { guard keyPath == "contentSize" else { return } controller.preferredContentSize = controller.tableView.contentSize } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } deinit { controller.tableView.removeObserver(self, forKeyPath: "contentSize") } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 6 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("cell")! switch(indexPath.row) { case 0: cell.textLabel?.text = "Upcoming activities" let switchView = UISwitch(frame: CGRectZero) cell.accessoryView = switchView switchView.setOn(true, animated: false) break case 1: cell.textLabel?.text = "Past activities" let switchView = UISwitch(frame: CGRectZero) cell.accessoryView = switchView switchView.setOn(false, animated: false) break case 2: cell.textLabel?.text = "Activities where I am admin" let switchView = UISwitch(frame: CGRectZero) cell.accessoryView = switchView switchView.setOn(true, animated: false) break case 3: cell.textLabel?.text = "Attending" let switchView = UISwitch(frame: CGRectZero) cell.accessoryView = switchView switchView.setOn(true, animated: false) break case 4: cell.textLabel?.text = "Declined" let switchView = UISwitch(frame: CGRectZero) cell.accessoryView = switchView switchView.setOn(true, animated: false) break case 5: cell.textLabel?.text = "Not responded" let switchView = UISwitch(frame: CGRectZero) cell.accessoryView = switchView switchView.setOn(true, animated: false) break default: fatalError() } return cell } } 

演示应用程序

为了实现这一点,您可以通过UIView创建自己的自定义控件,然后将UITableView添加到该View 。 然后,您可以创建具有标签和UISwitch自定义单元格的行,并使用页脚视图创建重置并保存在UITableview的页脚中。 之后,使自定义视图透明背景。 然后将一个选项数组传递给该视图,以在该自定义控件中创建行。