ActionSheetController

一个 Swift 包,它模仿了带有附加功能的 UIAlertController Actionsheet

ActionSheetController 使您能够向 UIAlertController 添加额外的功能,例如自定义视图、图像、自定义视图操作和头部,这些功能在默认情况下是不可用的。

支持的平台

添加到你的项目

按照 Apple 的指南 通过 SPM 将包添加到你的项目中。

用法

基本用法

基本的 ActionSheetController。直接模仿 UIAlertController Actionsheet

import ActionSheetController

let alert = ActionSheetController(title: "Backup Data", message: "How often do you want to backup your data?")
alert.addAction(title: "Daily", type: .normal, action: {
    // Backup Daily
})
alert.addAction(title: "Weekly", type: .normal, action: {
    // Backup Weekly
})
alert.addAction(title: "Monthly", type: .normal, action: {
    // Backup Monthly
})
alert.addAction(title: "Never", type: .destructive, action: nil)
alert.launch()

带有完成操作的 ActionSheetController

带有 addActionActionSheetController。用自定义标题替换“取消”文本,并在需要时执行操作

let alert = ActionSheetController(title: "Log Session", message: "Do you want to continue logging your session?")
alert.addAction(title: "Yes", type: .normal, action: nil)
alert.addAction(title: "No", type: .normal, action: nil)
alert.addDoneAction(title: "Ask me later", type: .normal) {
    //Perform Action
}
alert.launch()

带有头部视图的 ActionSheetController

带有 addHeader(view: UIView)ActionSheetController。向 ActionSheetController 添加自定义头部

let block: UIView = {
    let view = UIView()
    view.layer.cornerRadius = 50
    view.backgroundColor = .yellow
    view.heightAnchor.constraint(equalToConstant: 100).isActive = true
    view.widthAnchor.constraint(equalToConstant: 100).isActive = true
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

let alert = ActionSheetController(title: "Yellow Header Here", message: "Awesome!")
alert.addHeader(view: block)
alert.launch()

let block: UIView = {
    let view = UIView()
    view.layer.cornerRadius = 50
    view.backgroundColor = .yellow
    view.heightAnchor.constraint(equalToConstant: 100).isActive = true
    view.widthAnchor.constraint(equalToConstant: 100).isActive = true
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

let alert = ActionSheetController(title: "Yellow Header Here", message: "Awesome!")
alert.addAction(title: "Yes", type: .normal, action: nil)
alert.addAction(title: "No", type: .normal, action: nil)
alert.addHeader(view: block)
alert.launch()

带有 customAction 视图的 ActionSheetController

带有 addCustomAction(view: UIView)ActionSheetController。向 ActionSheetController 添加自定义操作视图

let textfield: UITextField = {
    let view = UITextField()
    view.borderStyle = .bezel
    view.placeholder = "Enter contact name"
    view.widthAnchor.constraint(equalToConstant: 300).isActive = true
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

let alert = ActionSheetController(title: "Edit Contact", message: "Enter new contact name")
alert.addCustomAction(view: textfield)
alert.addAction(title: "Cancel", type: .normal, action: nil)
alert.addDoneAction(title: "Save", type: .normal, action: {
    let name = textfield.text
    //Save contact
})
alert.launch()

let slider: UISlider = {
    let view = UISlider(frame: .zero)
    view.widthAnchor.constraint(equalToConstant: 300).isActive = true
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()
let alert = ActionSheetController(title: "Background Opacity", message: "Drag slider to adjust opacity")
alert.addCustomAction(view: slider)
alert.addAction(title: "Cancel", type: .normal, action: nil)
alert.addDoneAction(title: "Save", type: .normal, action: {
    //Save
})
alert.launch()

带有头部图像的 ActionSheetController

带有 addHeader(image: UIImage?, size: Size? = nil, cornerRadius: CGFloat? = nil, title: String?, message: String?)ActionSheetController。向 ActionSheetController 添加自定义头部图像

let alert = ActionSheetController(title: nil, message: nil)
alert.addHeader(image: UIImage(named: "pic"), cornerRadius: 50, title: "John Doe", message: "iOS Developer")
alert.addAction(title: "Follow", type: .normal, action: nil)
alert.addAction(title: "Unfollow", type: .destructive, action: nil)
alert.launch()

let alert = ActionSheetController(title: nil, message: nil)
alert.addHeader(image: UIImage(named: "success-2"), title: "Yay!", message: "You've opened the app for 3 consecutive days")
alert.addAction(title: "Claim Reward", type: .normal, action: {
    //Claim Reward
})
alert.launch()