blob: 8c5bebe534e2fdb9e9d9181156219e3ee4fdeab3 [file] [log] [blame]
// Copyright 2018-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import UIKit
import MaterialComponentsAlpha.MaterialActionSheet
import MaterialComponentsAlpha.MaterialActionSheet_ActionSheetThemer
import MaterialComponents.MaterialColorScheme
import MaterialComponents.MaterialTypographyScheme
class ActionSheetSwiftExample: UIViewController {
var colorScheme = MDCSemanticColorScheme()
var typographyScheme = MDCTypographyScheme()
var actionSheetScheme = MDCActionSheetScheme()
let tableView = UITableView()
enum ActionSheetExampleType {
case typical, title, message, noIcons, titleAndMessage, dynamicType, delayed, thirtyOptions
}
typealias ExamplesTuple = (label: String, type: ActionSheetExampleType)
let data: [ExamplesTuple] = [
("Typical Use", .typical),
("Title only", .title),
("Message only", .message),
("No Icons", .noIcons),
("With Title and Message", .titleAndMessage),
("Dynamic Type Enabled", .dynamicType),
("Delayed", .delayed),
("Thirty Options", .thirtyOptions)
]
let cellIdentifier = "BaseCell"
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
view.backgroundColor = colorScheme.backgroundColor
tableView.frame = view.frame
tableView.frame.origin.y = 0.0
view.addSubview(tableView)
}
func showActionSheet(_ type: ActionSheetExampleType) {
let actionSheet: MDCActionSheetController
switch type {
case .typical:
actionSheet = ActionSheetSwiftExample.typical()
case .title:
actionSheet = ActionSheetSwiftExample.title()
case .message:
actionSheet = ActionSheetSwiftExample.message()
case .noIcons:
actionSheet = ActionSheetSwiftExample.noIcons()
case .titleAndMessage:
actionSheet = ActionSheetSwiftExample.titleAndMessage()
case .dynamicType:
actionSheet = ActionSheetSwiftExample.dynamic()
case .delayed:
actionSheet = ActionSheetSwiftExample.titleAndMessage()
let action = MDCActionSheetAction(title: "Home", image: UIImage(named: "Home")) { _ in
print("Second home action")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
actionSheet.title = "New title"
actionSheet.message = "New Message"
actionSheet.addAction(action)
actionSheet.addAction(action)
actionSheet.addAction(action)
actionSheet.backgroundColor = .green
}
case .thirtyOptions:
actionSheet = ActionSheetSwiftExample.thirtyOptions()
}
actionSheetScheme.colorScheme = colorScheme
actionSheetScheme.typographyScheme = typographyScheme
MDCActionSheetThemer.applyScheme(actionSheetScheme, to: actionSheet)
present(actionSheet, animated: true, completion: nil)
}
}
// MARK: Catalog by Convensions
extension ActionSheetSwiftExample {
class func catalogMetadata() -> [String: Any] {
return [
"breadcrumbs": ["Action Sheet", "Action Sheet (Swift)"],
"primaryDemo": false,
"presentable": false,
]
}
}
extension ActionSheetSwiftExample : UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
showActionSheet(data[indexPath.row].type)
}
}
extension ActionSheetSwiftExample : UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)
cell.textLabel?.text = data[indexPath.row].label
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
}
extension ActionSheetSwiftExample {
static var actionOne: MDCActionSheetAction {
return MDCActionSheetAction(title: "Home",
image: UIImage(named: "Home")!) { (_) in
print("Home action") }
}
static var actionTwo: MDCActionSheetAction {
return MDCActionSheetAction(title: "Favorite",
image: UIImage(named: "Favorite")!) { (_) in
print("Favorite action") }
}
static var actionThree: MDCActionSheetAction {
return MDCActionSheetAction(title: "Email",
image: UIImage(named: "Email")!) { (_) in
print("Email action") }
}
static var messageString: String {
return "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ultricies diam " +
"libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risusnmaximus tempus. " +
"Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, quis eleifend nisi " +
"eros dictum mi. In finibus vulputate eros, in luctus diam auctor in."
}
static func typical() -> MDCActionSheetController {
let actionSheet = MDCActionSheetController()
actionSheet.addAction(actionOne)
actionSheet.addAction(actionTwo)
actionSheet.addAction(actionThree)
return actionSheet
}
static func title() -> MDCActionSheetController {
let actionSheet: MDCActionSheetController = MDCActionSheetController(title: "Action Sheet")
actionSheet.addAction(actionOne)
actionSheet.addAction(actionTwo)
actionSheet.addAction(actionThree)
return actionSheet
}
static func message() -> MDCActionSheetController {
let actionSheet = MDCActionSheetController(title: nil,
message: messageString)
actionSheet.addAction(actionOne)
actionSheet.addAction(actionTwo)
actionSheet.addAction(actionThree)
return actionSheet
}
static func titleAndMessage() -> MDCActionSheetController {
let actionSheet = MDCActionSheetController(title: "Action Sheet",
message: messageString)
actionSheet.addAction(actionOne)
actionSheet.addAction(actionTwo)
actionSheet.addAction(actionThree)
return actionSheet
}
static func noIcons() -> MDCActionSheetController {
let actionSheet = MDCActionSheetController(title: "Action Sheet", message: messageString)
let action1 = MDCActionSheetAction(title: "Home", image: nil, handler: { _ in
print("Home action")
})
let action2 = MDCActionSheetAction(title: "Favorite", image: nil, handler: { _ in
print("Favorite action")
})
let action3 = MDCActionSheetAction(title: "Email", image: nil, handler: { _ in
print("Email action")
})
actionSheet.addAction(action1)
actionSheet.addAction(action2)
actionSheet.addAction(action3)
return actionSheet
}
static func dynamic() -> MDCActionSheetController {
let actionSheet = MDCActionSheetController(title: "Action sheet", message: messageString)
actionSheet.mdc_adjustsFontForContentSizeCategory = true
let actionThree = MDCActionSheetAction(title: "Email",
image: UIImage(named: "Email")!,
handler: nil)
actionSheet.addAction(actionOne)
actionSheet.addAction(actionTwo)
actionSheet.addAction(actionThree)
return actionSheet
}
static func thirtyOptions() -> MDCActionSheetController {
let actionSheet = MDCActionSheetController(title: "Action sheet", message: messageString)
for i in 1...30 {
let action = MDCActionSheetAction(title: "Action \(i)",
image: UIImage(named: "Home"),
handler: nil)
actionSheet.addAction(action)
}
return actionSheet
}
}