| | |
| | | IQToolbar references for better customization control. |
| | | */ |
| | | var toolbar: IQToolbar { |
| | | var toolbar: IQToolbar? = base.inputAccessoryView as? IQToolbar |
| | | var toolbar: IQToolbar? = base?.inputAccessoryView as? IQToolbar |
| | | |
| | | if toolbar == nil { |
| | | if toolbar == nil, let base = base { |
| | | toolbar = objc_getAssociatedObject(base, &AssociatedKeys.toolbar) as? IQToolbar |
| | | } |
| | | |
| | |
| | | return unwrappedToolbar |
| | | } else { |
| | | |
| | | let width: CGFloat = base.window?.windowScene?.screen.bounds.width ?? 0 |
| | | let width: CGFloat = base?.window?.windowScene?.screen.bounds.width ?? 0 |
| | | |
| | | let frame = CGRect(origin: .zero, size: .init(width: width, height: 44)) |
| | | let newToolbar = IQToolbar(frame: frame) |
| | | |
| | | objc_setAssociatedObject(base, &AssociatedKeys.toolbar, newToolbar, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) |
| | | if let base = base { |
| | | objc_setAssociatedObject(base, &AssociatedKeys.toolbar, newToolbar, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) |
| | | } |
| | | |
| | | return newToolbar |
| | | } |
| | |
| | | */ |
| | | var hidePlaceholder: Bool { |
| | | get { |
| | | return objc_getAssociatedObject(base, &AssociatedKeys.hidePlaceholder) as? Bool ?? false |
| | | if let base = base { |
| | | return objc_getAssociatedObject(base, &AssociatedKeys.hidePlaceholder) as? Bool ?? false |
| | | } |
| | | return false |
| | | } |
| | | set(newValue) { |
| | | objc_setAssociatedObject(base, &AssociatedKeys.hidePlaceholder, |
| | | newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) |
| | | toolbar.titleBarButton.title = drawingPlaceholder |
| | | if let base = base { |
| | | objc_setAssociatedObject(base, &AssociatedKeys.hidePlaceholder, |
| | | newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) |
| | | toolbar.titleBarButton.title = drawingPlaceholder |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | var placeholder: String? { |
| | | get { |
| | | return objc_getAssociatedObject(base, &AssociatedKeys.placeholder) as? String |
| | | if let base = base { |
| | | return objc_getAssociatedObject(base, &AssociatedKeys.placeholder) as? String |
| | | } |
| | | return nil |
| | | } |
| | | set(newValue) { |
| | | objc_setAssociatedObject(base, &AssociatedKeys.placeholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) |
| | | toolbar.titleBarButton.title = drawingPlaceholder |
| | | if let base = base { |
| | | // swiftlint:disable line_length |
| | | objc_setAssociatedObject(base, &AssociatedKeys.placeholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) |
| | | toolbar.titleBarButton.title = drawingPlaceholder |
| | | // swiftlint:enable line_length |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | return nil |
| | | } else if placeholder?.isEmpty == false { |
| | | return placeholder |
| | | } else if let placeholderable: IQPlaceholderable = base as? IQPlaceholderable { |
| | | } else if let placeholderable: any IQPlaceholderable = base as? (any IQPlaceholderable) { |
| | | |
| | | if let placeholder = placeholderable.attributedPlaceholder?.string, |
| | | !placeholder.isEmpty { |
| | |
| | | titleAccessibilityLabel: String? = nil) { |
| | | |
| | | // If can't set InputAccessoryView. Then return |
| | | if base.responds(to: #selector(setter: UITextField.inputAccessoryView)) { |
| | | if base?.responds(to: #selector(setter: UITextField.inputAccessoryView)) == true { |
| | | |
| | | // Creating a toolBar for phoneNumber keyboard |
| | | let toolbar: IQToolbar = toolbar |
| | |
| | | // Adding button to toolBar. |
| | | toolbar.items = items |
| | | |
| | | if let textInput: UITextInput = base as? UITextInput { |
| | | if let textInput: any UITextInput = base as? (any UITextInput) { |
| | | switch textInput.keyboardAppearance { |
| | | case .dark?: |
| | | toolbar.barStyle = .black |
| | |
| | | } |
| | | |
| | | // Setting toolbar to keyboard. |
| | | let reloadInputViews: Bool = base.inputAccessoryView != toolbar |
| | | let reloadInputViews: Bool = base?.inputAccessoryView != toolbar |
| | | if reloadInputViews { |
| | | if let textField: UITextField = base as? UITextField { |
| | | textField.inputAccessoryView = toolbar |
| | | } else if let textView: UITextView = base as? UITextView { |
| | | textView.inputAccessoryView = toolbar |
| | | } |
| | | base.reloadInputViews() |
| | | base?.reloadInputViews() |
| | | } |
| | | } |
| | | } |