MaterialDialogs-iOS
这是一个为 iOS 设计的 Material Design 对话框库。此库受到 Android 上的 Material-dialogs 的启发
要求
- 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 类包装,当确认动作按钮被触发时,闭包返回一个值。您负责在闭包中实现返回值。有关更多信息,请参阅示例例程。