| | |
| | | |
| | | var controllersHierarchy: [UIViewController] = [] |
| | | |
| | | if var topController: UIViewController = base.window?.rootViewController { |
| | | if var topController: UIViewController = base?.window?.rootViewController { |
| | | controllersHierarchy.append(topController) |
| | | |
| | | while let presented: UIViewController = topController.presentedViewController { |
| | |
| | | */ |
| | | func superviewOf<T: UIView>(type classType: T.Type, belowView: UIView? = nil) -> T? { |
| | | |
| | | var superView: UIView? = base.superview |
| | | var superView: UIView? = base?.superview |
| | | |
| | | while let unwrappedSuperView: UIView = superView { |
| | | |
| | |
| | | var tempTextFields: [UIView] = [] |
| | | |
| | | // Getting all siblings |
| | | if let siblings: [UIView] = base.superview?.subviews { |
| | | if let siblings: [UIView] = base?.superview?.subviews { |
| | | for textField in siblings { |
| | | if textField == base || !textField.iq.ignoreSwitchingByNextPrevious, |
| | | textField.iq.canBecomeFirstResponder() { |
| | |
| | | // Array of (UITextField/UITextView's). |
| | | var textfields: [UIView] = [] |
| | | |
| | | for textField in base.subviews { |
| | | for textField in base?.subviews ?? [] { |
| | | |
| | | if textField == base || !textField.iq.ignoreSwitchingByNextPrevious, |
| | | textField.iq.canBecomeFirstResponder() { |
| | |
| | | // Sometimes there are hidden or disabled views and textField inside them still recorded, |
| | | // so we added some more validations here (Bug ID: #458) |
| | | // Uncommented else (Bug ID: #625) |
| | | else if textField.subviews.count != 0, base.isUserInteractionEnabled, !base.isHidden, base.alpha != 0.0 { |
| | | else if textField.subviews.count != 0, |
| | | base?.isUserInteractionEnabled == true, |
| | | base?.isHidden == false, base?.alpha != 0.0 { |
| | | for deepView in textField.iq.deepResponderViews() { |
| | | textfields.append(deepView) |
| | | } |
| | |
| | | |
| | | var canBecomeFirstResponder: Bool = false |
| | | |
| | | if base.conforms(to: UITextInput.self) { |
| | | if base?.conforms(to: (any UITextInput).self) == true { |
| | | // Setting toolbar to keyboard. |
| | | if let textView: UITextView = base as? UITextView { |
| | | canBecomeFirstResponder = textView.isEditable |
| | |
| | | } |
| | | |
| | | if canBecomeFirstResponder { |
| | | canBecomeFirstResponder = base.isUserInteractionEnabled && |
| | | !base.isHidden && |
| | | base.alpha != 0.0 && |
| | | canBecomeFirstResponder = base?.isUserInteractionEnabled == true && |
| | | base?.isHidden == false && |
| | | base?.alpha != 0.0 && |
| | | !isAlertViewTextField() && |
| | | textFieldSearchBar() == nil |
| | | } |
| | |
| | | */ |
| | | func textFieldSearchBar() -> UISearchBar? { |
| | | |
| | | var responder: UIResponder? = base.next |
| | | var responder: UIResponder? = base?.next |
| | | |
| | | while let bar: UIResponder = responder { |
| | | |
| | |
| | | func depth() -> Int { |
| | | var depth: Int = 0 |
| | | |
| | | if let superView: UIView = base.superview { |
| | | if let superView: UIView = base?.superview { |
| | | depth = superView.iq.depth()+1 |
| | | } |
| | | |