From 4843b3004b788d078ba16118a2f1b33de0dc98be Mon Sep 17 00:00:00 2001 From: Pedro Carrasco Date: Sun, 19 Jan 2020 16:59:24 +0000 Subject: [PATCH] Added support to display a checkmark with `isSelected` (#16) * Added support to display a checkmark with `isSelected` * Added test coverage to `isSelected` * Renamed `isSelected` to `isChecked` * Updated README.md * Updated documentation --- CHANGELOG.md | 3 +++ Example/ImageAlertAction/ViewController.swift | 3 +++ Example/Podfile.lock | 4 ++-- .../Local Podspecs/ImageAlertAction.podspec.json | 4 ++-- Example/Pods/Manifest.lock | 4 ++-- .../ImageAlertAction/ImageAlertAction-Info.plist | 2 +- Example/Tests/Tests.swift | 10 ++++++++++ ImageAlertAction.podspec | 2 +- ImageAlertAction/Classes/UIAlertAction+Image.swift | 6 ++++++ README.md | 14 ++++++++++++++ 10 files changed, 44 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 829e530..52d8095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ ## Next +## 3.2.0 +- Added support to display a checkmark with `isChecked` + ## 3.1.0 - Updated to Swift 5.1 diff --git a/Example/ImageAlertAction/ViewController.swift b/Example/ImageAlertAction/ViewController.swift index 8d62611..ef274fd 100644 --- a/Example/ImageAlertAction/ViewController.swift +++ b/Example/ImageAlertAction/ViewController.swift @@ -15,6 +15,9 @@ class ViewController: UIViewController { let settings = UIAlertAction(title: "Settings", image: #imageLiteral(resourceName: "settings"), style: .default) alertController.addAction(settings) + + let selectedSettings = UIAlertAction(title: "Checked Settings", image: #imageLiteral(resourceName: "settings"), isChecked: true, style: .default) + alertController.addAction(selectedSettings) let cancel = UIAlertAction(title: "Cancel", style: .cancel) alertController.addAction(cancel) diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 03fe1f8..77d533f 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - ImageAlertAction (3.1.0) + - ImageAlertAction (3.2.0) DEPENDENCIES: - ImageAlertAction (from `../`) @@ -9,7 +9,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - ImageAlertAction: 2f4d6ecd9d4896eb4bb959f9d1c8a1101d6805f4 + ImageAlertAction: 5556758a632c531172c5b2afcc4a25417df9f5a2 PODFILE CHECKSUM: 2861c5c31891940484aaf82fd18a1725282b6061 diff --git a/Example/Pods/Local Podspecs/ImageAlertAction.podspec.json b/Example/Pods/Local Podspecs/ImageAlertAction.podspec.json index c404ec6..02444a7 100644 --- a/Example/Pods/Local Podspecs/ImageAlertAction.podspec.json +++ b/Example/Pods/Local Podspecs/ImageAlertAction.podspec.json @@ -1,6 +1,6 @@ { "name": "ImageAlertAction", - "version": "3.1.0", + "version": "3.2.0", "summary": "Image support for UIAlertAction", "description": "ImageAlertAction adds image support to UIAlertAction.\nUse this to visually convey an action's purpose.", "homepage": "https://github.com/BasThomas/ImageAlertAction", @@ -17,7 +17,7 @@ }, "source": { "git": "https://github.com/BasThomas/ImageAlertAction.git", - "tag": "3.1.0" + "tag": "3.2.0" }, "social_media_url": "https://twitter.com/basthomas", "platforms": { diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 03fe1f8..77d533f 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,5 +1,5 @@ PODS: - - ImageAlertAction (3.1.0) + - ImageAlertAction (3.2.0) DEPENDENCIES: - ImageAlertAction (from `../`) @@ -9,7 +9,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - ImageAlertAction: 2f4d6ecd9d4896eb4bb959f9d1c8a1101d6805f4 + ImageAlertAction: 5556758a632c531172c5b2afcc4a25417df9f5a2 PODFILE CHECKSUM: 2861c5c31891940484aaf82fd18a1725282b6061 diff --git a/Example/Pods/Target Support Files/ImageAlertAction/ImageAlertAction-Info.plist b/Example/Pods/Target Support Files/ImageAlertAction/ImageAlertAction-Info.plist index 90db36a..9ae03a0 100644 --- a/Example/Pods/Target Support Files/ImageAlertAction/ImageAlertAction-Info.plist +++ b/Example/Pods/Target Support Files/ImageAlertAction/ImageAlertAction-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.1.0 + 3.2.0 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift index d1e40ab..7f0cbc4 100644 --- a/Example/Tests/Tests.swift +++ b/Example/Tests/Tests.swift @@ -6,4 +6,14 @@ class Tests: XCTestCase { let action = UIAlertAction(title: "Hello world!", image: #imageLiteral(resourceName: "settings"), style: .cancel) XCTAssertNotNil(action.image) } + + func testCheckmarkIsCorrectlySet() { + let action = UIAlertAction(title: "Hello world!", image: #imageLiteral(resourceName: "settings"), isChecked: true, style: .cancel) + XCTAssertTrue(action.isChecked) + } + + func testCheckmarkIsNotSet() { + let action = UIAlertAction(title: "Hello world!", image: #imageLiteral(resourceName: "settings"), style: .cancel) + XCTAssertFalse(action.isChecked) + } } diff --git a/ImageAlertAction.podspec b/ImageAlertAction.podspec index 9939aaf..b2bd5ae 100644 --- a/ImageAlertAction.podspec +++ b/ImageAlertAction.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'ImageAlertAction' - s.version = '3.1.0' + s.version = '3.2.0' s.summary = 'Image support for UIAlertAction' s.description = <<-DESC ImageAlertAction adds image support to UIAlertAction. diff --git a/ImageAlertAction/Classes/UIAlertAction+Image.swift b/ImageAlertAction/Classes/UIAlertAction+Image.swift index e3348c9..021ae1e 100644 --- a/ImageAlertAction/Classes/UIAlertAction+Image.swift +++ b/ImageAlertAction/Classes/UIAlertAction+Image.swift @@ -11,6 +11,7 @@ import UIKit extension UIAlertAction { private var imageKey: String { "image" } + private var isCheckedKey: String { "checked" } /// Create and return an action with the specified title and behavior. /// @@ -24,6 +25,7 @@ extension UIAlertAction { /// may be used with [UIAlertAction.Style.cancel](https://developer.apple.com/documentation/uikit/uialertaction/style/cancel). /// - parameter image: An image to display on the left side of the button. /// Use this to visually convey the action's purpose. + /// - parameter isChecked: A boolean that will be used to determine if a check mark should be displayed on the right side of the title /// - parameter style: Additional styling information to apply to the button. /// Use the style information to convey the type of action that is performed by the button. /// For a list of possible values, see the constants in @@ -36,13 +38,17 @@ extension UIAlertAction { public convenience init( title: String? = nil, image: UIImage, + isChecked: Bool = false, style: UIAlertAction.Style, handler: ((UIAlertAction) -> Void)? = nil ) { self.init(title: title, style: style, handler: handler) setValue(image, forKey: imageKey) + setValue(isChecked, forKey: isCheckedKey) } /// The image of the action's button. public var image: UIImage? { value(forKey: imageKey) as? UIImage } + + public var isChecked: Bool { value(forKey: isCheckedKey) as? Bool ?? false } } diff --git a/README.md b/README.md index d7e0fef..d537d48 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,20 @@ let settings = UIAlertAction( settings.image // returns an optional UIImage ``` +#### Adding a checkmark + +You can also show a check mark on actions via `isChecked` + +```swift +let settings = UIAlertAction( + title: "Settings", + image: #imageLiteral(resourceName: "settings"), + isChecked: true + style: .default +) +settings.isChecked // returns a Bool +``` + ### Presenting the `UIAlertController` To present a `UIAlertController` containing the `UIAlertAction`, nothing changes.