blob: 427720a43890390a2a79dcd1aac16cc7958fefdf [file] [log] [blame] [edit]
// Copyright 2019-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 MaterialComponents.MaterialCollections
import MaterialComponents.MaterialContainerScheme
import MaterialComponents.MaterialDialogs
import MaterialComponents.MaterialDialogs_Theming
import MaterialComponents.MaterialTypographyScheme
class DialogsAccessoryExampleViewController: MDCCollectionViewController {
@objc var containerScheme: MDCContainerScheming = MDCContainerScheme()
let kReusableIdentifierItem = "customCell"
var menu: [String] = []
var handler: MDCActionHandler = { action in
print(action.title ?? "Some Action")
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = containerScheme.colorScheme.backgroundColor
loadCollectionView(menu: [
"Text View",
"Title + Message + Text Field",
])
}
func loadCollectionView(menu: [String]) {
self.collectionView?.register(MDCCollectionViewTextCell.self, forCellWithReuseIdentifier: kReusableIdentifierItem)
self.menu = menu
}
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let alert = performActionFor(row: indexPath.row) else { return }
self.present(alert, animated: true, completion: nil)
}
private func performActionFor(row: Int) -> MDCAlertController? {
switch row {
case 0:
return performTextView()
case 1:
return performTextField()
default:
print("No row is selected")
return nil
}
}
func performTextView() -> MDCAlertController {
let alert = MDCAlertController()
let textView = UITextView()
let attributedText = NSMutableAttributedString(string: """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
""")
attributedText.addAttributes(
[ .link: URL(string: "https://www.google.com/search?q=lorem+ipsum")! ],
range: NSRange(location: 0, length: 11)
)
textView.attributedText = attributedText
textView.font = MDCTypographyScheme().body1
textView.isEditable = false
textView.isScrollEnabled = false
alert.accessoryView = textView
alert.addAction(MDCAlertAction(title:"Dismiss", handler: handler))
return alert
}
func performTextField() -> MDCAlertController {
let alert = MDCAlertController(title: "This is a title", message: "This is a message")
let textField = UITextField()
textField.placeholder = "This is a text field"
alert.accessoryView = textField
alert.addAction(MDCAlertAction(title:"Dismiss", handler: handler))
return alert
}
}
// MDCCollectionViewController Data Source
extension DialogsAccessoryExampleViewController {
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return menu.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kReusableIdentifierItem,
for: indexPath)
guard let customCell = cell as? MDCCollectionViewTextCell else { return cell }
customCell.isAccessibilityElement = true
customCell.accessibilityTraits = .button
let cellTitle = menu[indexPath.row]
customCell.accessibilityLabel = cellTitle
customCell.textLabel?.text = cellTitle
return customCell
}
}
// MARK: Catalog by convention
extension DialogsAccessoryExampleViewController {
@objc class func catalogMetadata() -> [String: Any] {
return [
"breadcrumbs": ["Dialogs", "Dialog With Accessory View"],
"primaryDemo": false,
"presentable": true,
]
}
}