MaterialDialog 1.1.2

MaterialDialog 1.1.2

Shadrach Mensah 维护。



MaterialDialogs-iOS

这是一个为 iOS 设计的 Material Design 对话框库。此库受到 Android 上的 Material-dialogs 的启发

Material Dialog Image

要求

  • Xcode 8+
  • iOS 9.0+

安装

  • 您可以通过将源文件夹添加到项目或将以下内容添加到您的 Podfile 中手动将 MaterialDialogs 添加到 Xcode 项目
  • 通过 Cocoapods
pod 'MaterialDialog'

用法

MaterialDialogs 提供了多种类型与用户进行交互的对话框。所有对话框都以相似的方式创建。不要忘记对一个对话框调用 show() 以使其在视图中显示。不要将对话框作为子视图添加。

对话结构

所有MaterialDialog初始化器都接受相当直接的自定义参数,例如标题、正文和动作标题,但最重要的初始化参数是completion:参数。completion参数是一个闭包,它提供了在对话按钮被交互后触发进一步操作的机制。闭包还提供了一个名为actionType:ActionType的参数。ActionType是一个枚举,其中有两个用于用户按下取消动作按钮或对话中的肯定按钮的情况。

public enum ActionType{
        case affirm(Any)
        case cancel
    }

肯定情况还传递了一个对象,包含了按下的肯定按钮所需的所有响应数据。每个对话框类型都有其独特的对象传递给肯定情况。

Material Dialog 肯定(返回对象)
基本对话框 肯定(布尔值)
文本输入对话框 肯定(字符串)
文本输入组 肯定(字符串数组)
渐进式对话框 肯定(布尔值)
进度对话框 肯定(布尔值)
单选对话框 肯定(整数)
多选对话框 肯定(索引集)
自定义视图对话框 肯定(用户定义类型)

详细说明请查阅Xcode文档

基本对话框

let dialog = MaterialDialog.basicDialogue("This is Test Run", body: text, cancelActionTitle: "Dismiss", actionTitle: "Confirm", completion: { (type) in
            switch type{
            case .cancel:
                print("I was Cancelled")
                break
            case .affirm(let sucess):
                print("I was affirmed with")
                break
            }
        })
 dialog.show()       

显示一个简单的带有文本的对话框。可选肯定动作按钮。

文本输入对话框

let newDialog = MaterialDialog.textInputDialog(title: "Enter Your Name", placeholder: "Your Name", cancelActionTitle: "Dismiss", actionTitle: "Save", completion: { (type) in
            switch type{
            case .affirm(let result):
                guard let result = result as? String else {
                    print("Wrong Result")
                    return
                }
                print("This is Result: \(result)")
                break
            case .cancel:
                print("I was Cancelled")
                break
            }
        })
 newDialog.show()

用于从用户那里快速获取信息

文本输入组对话框

let group = MaterialDialog.textInputGroupDialog(title: "Enter Credentials", numberOfInputs: 3, placeholders: ["Enter Name","Enter Email", "Enter Password"], inputTextContentTypes: [.username,.emailAddress,.password], cancelActionTitle: "Dismiss", actionTitle: "Sign In", completion: { (type) in
            switch type{
            case .affirm(let result):
                guard let result = result as? [String] else {
                    print("Wrong Result")
                    return
                }
                print("This is Result: \(result)")
                break
            case .cancel:
                print("I was Cancelled")
                break
            }
        })
 group.show()

从用户那里获取多个信息

渐进式对话框

let dialog = MaterialDialog.progressiveDialog(title: "Downloading Video", completion: { (type) in
            switch type{
            case .cancel:
                print("I was Cancelled")
                break
            case .affirm:
                print("I was affirmed")
                break
            }
        })
dialog.show()

对于渐进式对话框,用户必须重复调用 updateWith(progress value:CGFloat) 方法来设置进度的新值。例如:dialog.updateWith(progress:0.5)。未调用此方法将显示一个无法检测到进度的渐进式对话框。进度值是介于 0 和 1 之间的浮点数。

进度对话框(无限型)

let prog = MaterialDialog.progressDialog(title: "Downloading", info: "Please wait....", addCancel: false, completion: { (type) in
            switch type{
            case .cancel:
                print("I was Cancelled")
                break
            case .affirm:
                print("I was affirmed")
                break
            }
        })
        return prog
    }()
    
prog.show()

显示一个带有连续旋转按钮的进度对话框。可以通过将 addCancel 参数设置为 false 以实现无页脚进度对话框。将 addCancel 设置为 true 将添加一个包含取消动作按钮的页脚。如果 addCancel 设置为 false,那么您将负责从屏幕上删除对话框。可以通过调用 cancel()(即 prog.cancel())来完成此操作。

单选列表对话框

let dialog = MaterialDialog.listDialog(title: "Best Social Network", list: .singleChoice, accessoryType: .radio, choices: list, cancelActionTitle: "CANCEL", actionTitle: "CONFIRM", completion: { (type) in
            switch type{
            case .cancel:
                print("I was Cancelled")
                break
            case .affirm(let result):
                print("I was affirmed with data: \(result)")
                break
            }
        })
dialog.show()

这是一个仅允许单选的列表对话框。参数 accessoryType: 提供了在选择图标之间选择单选按钮和勾选标志的选项。

多选列表对话框

let dialog = MaterialDialog.listDialog(title: "Best Social Network", list: .multipleChoice, accessoryType: .checkbox, choices: list, cancelActionTitle: "CANCEL", actionTitle: "CONFIRM", completion: { (type) in
            switch type{
            case .cancel:
                print("I was Cancelled")
                break
            case .affirm(let result):
                if let result  = result as? IndexSet{
                    let all = result.map{$0}
                    print("I was affirmed with data: \(all)")
                }
                
                break
            }
            
        })
dialog.show()

这是一个允许多选的列表对话框。参数 accessoryType: 允许选择单选按钮和勾选标志作为选择图标的类型。

自定义视图对话框

自定义视图对话框是特殊的材质对话框,允许您显式设置对话框的内容视图。但它有一些限制。以下是如何创建自定义视图对话框的示例。

let custom = CustomDialog(view: myCutomUIView) { () -> Any in
            return someOperationInThisCustomView()
 }
 
 let dialog = MaterialDialog.customDialog(title: "Pick A Color", customview: custom, withFooter: true) { (type) in
            switch type{
            case .affirm(let result):
                guard let result = result  else {
                    print("Wrong Result")
                    return
                }
                print("This is Result: \(result)")
                break
            case .cancel:
                print("I was Cancelled")
                break
            }
        
        }
        

自定义视图必须由包含一个 UIView 和一个闭包的 CustomDialog 类包装,当确认动作按钮被触发时,闭包返回一个值。您负责在闭包中实现返回值。有关更多信息,请参阅示例例程。