美文网首页
未经调试的 ActionSheet 选择器。。。

未经调试的 ActionSheet 选择器。。。

作者: 红色海_ | 来源:发表于2019-11-07 22:56 被阅读0次

    未经调试的 ActionSheet 选择器。。。

    //
    //  MySelector.swift
    //  TestMyActionSheet
    //
    //  Created by King on 2019/11/7.
    //  Copyright © 2019 King. All rights reserved.
    //
    
    import UIKit
    
    
    /********使用方法举例***********************
    let titles = ["111", "222"]
    var selector = MySelector.init(self,
                           clickedItem,
                                   "Please select",
                                   titles, { (index:Int)->Void in
                                    if titles[index] == "111" {
                                        //
                                    }}
    ).showFromBarItem()
    ********************************************/
    
    // tag属性
    class MyAlertAction: UIAlertAction {
        var tag : Int?
    }
    
    // 点击相应的闭包
    typealias MyOption = ( _:Int)->Void
    
    class MySelector: NSObject {
        
        var alert : UIAlertController
        var viewController : UIViewController
        
        var tableView : UITableView?
        var indexPath : IndexPath?
        
        var barBtnItem : UIBarButtonItem?
        
        var selectorTitles : Array<String>!
        var selectedOption:MyOption!
        
        //构造函数 for UITableViewCell 弹出
        init(_ vc:UIViewController,
             _ tv:UITableView,
             _ path:IndexPath,
             _ title:String,
             _ titles:Array<String>,
             _ option:@escaping MyOption) {
            viewController = vc
            selectorTitles = titles
            tableView = tv
            indexPath = path
            selectorTitles = titles
            selectedOption = option
            alert = UIAlertController.init(title: title, message: nil, preferredStyle: .actionSheet)
            alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        }
        
        //构造函数 for UIBarButtonItem 弹出
        init(_ vc:UIViewController,
             _ item:UIBarButtonItem,
             _ title:String,
             _ titles:Array<String>,
             _ option:@escaping MyOption) {
            viewController = vc
            selectorTitles = titles
            barBtnItem = item
            alert = UIAlertController.init(title: title, message: nil, preferredStyle: .actionSheet)
            alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        }
        
        // 添加选项。。
        func addActions() -> Void {
            for i in 0...selectorTitles.count {
                
                let action = MyAlertAction.init(title: selectorTitles[i], style: .default,
                                                handler: {(alertAction) in
                                                    let action = alertAction as! MyAlertAction
                                                    self.selectedOption(action.tag!)})
                action.tag = i
                alert.addAction(action)
            }
        }
        
       // UITableViewCell 弹出
        func showFromTableViewCell() ->Void {
            
            addActions()
            
            let popover : UIPopoverPresentationController? = alert.popoverPresentationController
            if nil != popover {
                popover?.sourceView = tableView
                popover?.sourceRect = (tableView?.cellForRow(at: indexPath!)!.frame)!
                popover?.permittedArrowDirections = .any
            }
            viewController.present(alert, animated: true, completion: nil)
        }
        
        // UIBarButtonItem弹出
        func showFromBarItem() -> Void {
            
            addActions()
            
            let popover : UIPopoverPresentationController? = alert.popoverPresentationController
            if nil != popover {
                popover?.sourceView = tableView
                popover?.barButtonItem = barBtnItem!
            }
            viewController.present(alert, animated: true, completion: nil)
        }
    }
    

    相关文章

      网友评论

          本文标题:未经调试的 ActionSheet 选择器。。。

          本文链接:https://www.haomeiwen.com/subject/urpbbctx.html