From b94a0687e1fe31b97e575643bee07bbfd87d8aab Mon Sep 17 00:00:00 2001 From: hackiftekhar Date: Fri, 14 Aug 2015 21:32:59 +0530 Subject: [PATCH] Upgraded Swift Version to match ObjC version --- .../Categories/IQUIWindow+Hierarchy.m | 2 +- IQKeyBoardManager/IQKeyboardManager.m | 28 +- .../IQUITextFieldView+Additions.swift | 56 ++ .../Categories/IQUIView+Hierarchy.swift | 19 +- .../IQUIViewController+Additions.swift | 46 ++ IQKeybordManagerSwift/IQKeyboardManager.swift | 516 +++++++++++------- .../IQTextView/IQTextView.swift | 15 + .../IQToolbar/IQTitleBarButtonItem.swift | 28 +- .../IQToolbar/IQToolbar.swift | 16 +- .../IQUIView+IQKeyboardToolbar.swift | 12 +- .../Base.lproj/LaunchScreen.xib | 41 -- .../IQKeyboardManager Swift/Info.plist | 2 - .../IQKeyboardManager Swift/Swift Pending.rtf | 22 +- .../project.pbxproj | 147 +++-- .../UserInterfaceState.xcuserstate | Bin 140617 -> 164724 bytes .../Base.lproj/Main.storyboard | 66 +-- 16 files changed, 603 insertions(+), 413 deletions(-) create mode 100644 IQKeybordManagerSwift/Categories/IQUITextFieldView+Additions.swift create mode 100644 IQKeybordManagerSwift/Categories/IQUIViewController+Additions.swift delete mode 100644 KeyboardTextFieldDemo/IQKeyboardManager Swift/Base.lproj/LaunchScreen.xib diff --git a/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m b/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m index f9b4023..fe32214 100644 --- a/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m +++ b/IQKeyBoardManager/Categories/IQUIWindow+Hierarchy.m @@ -26,7 +26,7 @@ @implementation UIWindow (IQ_UIWindow_Hierarchy) -- (UIViewController*) topMostController +- (UIViewController*)topMostController { UIViewController *topController = [self rootViewController]; diff --git a/IQKeyBoardManager/IQKeyboardManager.m b/IQKeyBoardManager/IQKeyboardManager.m index 1516d22..f3dd35e 100644 --- a/IQKeyBoardManager/IQKeyboardManager.m +++ b/IQKeyBoardManager/IQKeyboardManager.m @@ -247,11 +247,12 @@ void _IQShowLog(NSString *logString); //Creating gesture for @shouldResignOnTouchOutside. (Enhancement ID: #14) _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; [_tapGesture setDelegate:self]; - + _tapGesture.enabled = _shouldResignOnTouchOutside; + //Setting it's initial values _enable = NO; //This enables in +(void)load method. _animationDuration = 0.25; - _animationCurve = 7<<16; + _animationCurve = UIViewAnimationCurveEaseInOut; [self setKeyboardDistanceFromTextField:10.0]; _defaultToolbarTintColor = [UIColor blackColor]; [self setCanAdjustTextView:NO]; @@ -712,6 +713,7 @@ void _IQShowLog(NSString *logString); } completion:NULL]; + //Maintaining contentSize if (_lastScrollView.contentSize.height<_lastScrollView.frame.size.height) { CGSize contentSize = _lastScrollView.contentSize; @@ -962,7 +964,7 @@ void _IQShowLog(NSString *logString); } else { - _animationCurve = 0; + _animationCurve = UIViewAnimationOptionsCurveEaseOut } // Getting keyboard animation duration @@ -1082,15 +1084,16 @@ void _IQShowLog(NSString *logString); #ifdef NSFoundationVersionNumber_iOS_5_1 - if([[_textFieldView viewController] IQLayoutGuideConstraint]) + NSLayoutConstraint *constraint = [[_textFieldView viewController] IQLayoutGuideConstraint]; + + //If done LayoutGuide tweak + if (constraint && + ((constraint.firstItem == [[_textFieldView viewController] topLayoutGuide] || constraint.secondItem == [[_textFieldView viewController] topLayoutGuide]) || + (constraint.firstItem == [[_textFieldView viewController] bottomLayoutGuide] || constraint.secondItem == [[_textFieldView viewController] bottomLayoutGuide]))) { - NSLayoutConstraint *constraint = [[_textFieldView viewController] IQLayoutGuideConstraint]; - - [UIView animateWithDuration:_animationDuration delay:0 options:(7<<16|UIViewAnimationOptionBeginFromCurrentState) animations:^{ - constraint.constant = _layoutGuideConstraintInitialConstant; - [_rootViewController.view setNeedsLayout]; - [_rootViewController.view layoutIfNeeded]; - } completion:NULL]; + constraint.constant = _layoutGuideConstraintInitialConstant; + [_rootViewController.view setNeedsLayout]; + [_rootViewController.view layoutIfNeeded]; } else #endif @@ -1579,8 +1582,7 @@ void _IQShowLog(NSString *logString); UITextField *textField = nil; if ([siblings count]) - textField = [siblings objectAtIndex:0]; - + textField = [siblings objectAtIndex:0]; //Not using firstObject method because iOS5 doesn't not support 'firstObject' method. //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar). if (![textField inputAccessoryView] || ([[textField inputAccessoryView] tag] == kIQPreviousNextButtonToolbarTag)) diff --git a/IQKeybordManagerSwift/Categories/IQUITextFieldView+Additions.swift b/IQKeybordManagerSwift/Categories/IQUITextFieldView+Additions.swift new file mode 100644 index 0000000..4b15ca9 --- /dev/null +++ b/IQKeybordManagerSwift/Categories/IQUITextFieldView+Additions.swift @@ -0,0 +1,56 @@ +// +// IQUITextFieldView+Additions.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-15 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation +import UIKit + +/** +Uses default keyboard distance for textField. +*/ +let kIQUseDefaultKeyboardDistance = CGFloat.max + +private var kIQKeyboardDistanceFromTextField = "kIQKeyboardDistanceFromTextField" + +/** +UIView category for managing UITextField/UITextView +*/ +extension UIView { + + /** + To set customized distance from keyboard for textField/textView. Can't be less than zero + */ + var keyboardDistanceFromTextField: CGFloat { + get { + + if let aValue = objc_getAssociatedObject(self, &kIQKeyboardDistanceFromTextField) as? CGFloat { + return aValue + } else { + return kIQUseDefaultKeyboardDistance + } + } + set(newValue) { + objc_setAssociatedObject(self, &kIQKeyboardDistanceFromTextField, newValue, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) + } + } +} + diff --git a/IQKeybordManagerSwift/Categories/IQUIView+Hierarchy.swift b/IQKeybordManagerSwift/Categories/IQUIView+Hierarchy.swift index 4e8922b..174f12e 100644 --- a/IQKeybordManagerSwift/Categories/IQUIView+Hierarchy.swift +++ b/IQKeybordManagerSwift/Categories/IQUIView+Hierarchy.swift @@ -25,6 +25,8 @@ import Foundation import UIKit +private var kIQIsAskingCanBecomeFirstResponder = "kIQIsAskingCanBecomeFirstResponder" + /** UIView hierarchy category. */ @@ -40,14 +42,14 @@ extension UIView { var isAskingCanBecomeFirstResponder: Bool { get { - if let aValue = objc_getAssociatedObject(self, "isAskingCanBecomeFirstResponder") as? Bool { + if let aValue = objc_getAssociatedObject(self, &kIQIsAskingCanBecomeFirstResponder) as? Bool { return aValue } else { return false } } set(newValue) { - objc_setAssociatedObject(self, "isAskingCanBecomeFirstResponder", newValue, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) + objc_setAssociatedObject(self, &kIQIsAskingCanBecomeFirstResponder, newValue, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) } } @@ -218,18 +220,19 @@ extension UIView { var _IQcanBecomeFirstResponder = (canBecomeFirstResponder() == true && userInteractionEnabled == true && hidden == false && alpha != 0.0 && isAlertViewTextField() == false && isSearchBarTextField() == false) as Bool - // Setting toolbar to keyboard. - if let textField = self as? UITextField { - _IQcanBecomeFirstResponder = textField.enabled - } else if let textView = self as? UITextView { - _IQcanBecomeFirstResponder = textView.editable + if _IQcanBecomeFirstResponder == true { + // Setting toolbar to keyboard. + if let textField = self as? UITextField { + _IQcanBecomeFirstResponder = textField.enabled + } else if let textView = self as? UITextView { + _IQcanBecomeFirstResponder = textView.editable + } } isAskingCanBecomeFirstResponder = false return _IQcanBecomeFirstResponder } - ///------------------------- /// MARK: Special TextFields diff --git a/IQKeybordManagerSwift/Categories/IQUIViewController+Additions.swift b/IQKeybordManagerSwift/Categories/IQUIViewController+Additions.swift new file mode 100644 index 0000000..a77e037 --- /dev/null +++ b/IQKeybordManagerSwift/Categories/IQUIViewController+Additions.swift @@ -0,0 +1,46 @@ +// +// IQUIViewController+Additions.swift +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-15 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +import Foundation +import UIKit + + +private var kIQLayoutGuideConstraint = "kIQLayoutGuideConstraint" + + +extension UIViewController { + + /** + To set customized distance from keyboard for textField/textView. Can't be less than zero + */ + @IBOutlet var IQLayoutGuideConstraint: NSLayoutConstraint? { + get { + + return objc_getAssociatedObject(self, &kIQLayoutGuideConstraint) as? NSLayoutConstraint + } + + set(newValue) { + objc_setAssociatedObject(self, &kIQLayoutGuideConstraint, newValue, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) + } + } +} \ No newline at end of file diff --git a/IQKeybordManagerSwift/IQKeyboardManager.swift b/IQKeybordManagerSwift/IQKeyboardManager.swift index 0f47d91..991b536 100644 --- a/IQKeybordManagerSwift/IQKeyboardManager.swift +++ b/IQKeybordManagerSwift/IQKeyboardManager.swift @@ -33,12 +33,12 @@ import UIKit /** Default tag for toolbar with Done button -1002. */ -let kIQDoneButtonToolbarTag : Int = -1002 +let kIQDoneButtonToolbarTag = -1002 /** Default tag for toolbar with Previous/Next buttons -1005. */ -let kIQPreviousNextButtonToolbarTag : Int = -1005 +let kIQPreviousNextButtonToolbarTag = -1005 /** Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/Library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html @@ -54,7 +54,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /** Enable/disable managing distance between keyboard and textField. Default is YES(Enabled when class loads in `+(void)load` method). */ - var enable: Bool = false { + var enable = false { didSet { //If not enable, enable it. @@ -104,7 +104,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { return Static.kbManager } - ///------------------------- /// MARK: IQToolbar handling ///------------------------- @@ -112,7 +111,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /** Automatic add the IQToolbar functionality. Default is YES. */ - var enableAutoToolbar: Bool = true { + var enableAutoToolbar = true { didSet { @@ -183,7 +182,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /** Resigns Keyboard on touching outside of UITextField/View. Default is NO. */ - var shouldResignOnTouchOutside: Bool = false { + var shouldResignOnTouchOutside = false { didSet { _tapGesture.enabled = shouldResignOnTouchOutside @@ -197,7 +196,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /** Resigns currently first responder field. */ - func resignFirstResponder() { + func resignFirstResponder()-> Bool { if let textFieldRetain = _textFieldView { @@ -211,7 +210,11 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _IQShowLog("Refuses to resign first responder: \(_textFieldView?._IQDescription())") } + + return isResignFirstResponder; } + + return false } /** @@ -268,11 +271,11 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /** Navigate to previous responder textField/textView. */ - func goPrevious() { + func goPrevious()-> Bool { //Getting all responder view's. - if let textFields = responderViews() { - if let textFieldRetain = _textFieldView { + if let textFieldRetain = _textFieldView { + if let textFields = responderViews() { if textFields.containsObject(textFieldRetain) == true { //Getting index of current textField. let index = textFields.indexOfObject(textFieldRetain) @@ -291,20 +294,24 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _IQShowLog("Refuses to become first responder: \(nextTextField._IQDescription())") } + + return isAcceptAsFirstResponder } } } } + + return false } /** Navigate to next responder textField/textView. */ - func goNext() { + func goNext()-> Bool { //Getting all responder view's. - if let textFields = responderViews() { - if let textFieldRetain = _textFieldView { + if let textFieldRetain = _textFieldView { + if let textFields = responderViews() { if textFields.containsObject(textFieldRetain) == true { //Getting index of current textField. @@ -324,10 +331,14 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _IQShowLog("Refuses to become first responder: \(nextTextField._IQDescription())") } + + return isAcceptAsFirstResponder } } } } + + return false } /** previousAction. */ @@ -340,7 +351,14 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { } if canGoPrevious == true { - goPrevious() + + if let textFieldRetain = _textFieldView { + let isAcceptAsFirstResponder = goPrevious() + +// if isAcceptAsFirstResponder && textFieldRetain.previousInvocation == nil { +// textFieldRetain.previousInvocation.invoke() +// } + } } } @@ -353,8 +371,15 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { UIDevice.currentDevice().playInputClick() } - if canGoNext { - goNext() + if canGoNext == true { + + if let textFieldRetain = _textFieldView { + let isAcceptAsFirstResponder = goNext() + +// if isAcceptAsFirstResponder && textFieldRetain.nextInvocation == nil { +// textFieldRetain.nextInvocation.invoke() +// } + } } } @@ -367,16 +392,23 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { UIDevice.currentDevice().playInputClick() } - //Resign textFieldView. - resignFirstResponder() + if let textFieldRetain = _textFieldView { + //Resign textFieldView. + let isResignedFirstResponder = resignFirstResponder() + +// if isResignedFirstResponder && textFieldRetain.doneInvocation == nil { +// textFieldRetain.doneInvocation.invoke() +// } + } } /** Resigning on tap gesture. (Enhancement ID: #14)*/ func tapRecognized(gesture: UITapGestureRecognizer) { if gesture.state == UIGestureRecognizerState.Ended { + //Resigning currently responder textField. - gesture.view?.endEditing(true) + resignFirstResponder() } } @@ -532,9 +564,9 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /** To save rootViewController */ private weak var _rootViewController: UIViewController? - /** used with canAdjustTextView to detect a textFieldView frame is changes or not. (Bug ID: #92)*/ - private var _isTextFieldViewFrameChanged = false - + /** To save topBottomLayoutConstraint original constant */ + private var _layoutGuideConstraintInitialConstant: CGFloat = 0.25 + /*******************************************/ /** Variable to save lastScrollView that was scrolled. */ @@ -563,9 +595,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /** To mimic the keyboard animation */ private var _animationCurve = UIViewAnimationOptions.CurveEaseOut - /** Boolean to maintain keyboard is showing or it is hide. To solve rootViewController.view.frame calculations. */ - private var _isKeyboardShowing = false - /*******************************************/ /** TapGesture to resign keyboard on view's touch. */ @@ -579,22 +608,31 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /*******************************************/ /** Set of restricted classes for library */ - private var _disabledClasses = NSMutableSet() + private var _disabledClasses = NSMutableSet() /** Set of restricted classes for adding toolbar */ - private var _disabledToolbarClasses = NSMutableSet() + private var _disabledToolbarClasses = NSMutableSet() /** Set of permitted classes to add all inner textField as siblings */ - private var _toolbarPreviousNextConsideredClass = NSMutableSet() + private var _toolbarPreviousNextConsideredClass = NSMutableSet() /*******************************************/ + private struct flags { + /** used with canAdjustTextView to detect a textFieldView frame is changes or not. (Bug ID: #92)*/ + var isTextFieldViewFrameChanged = false + /** Boolean to maintain keyboard is showing or it is hide. To solve rootViewController.view.frame calculations. */ + var isKeyboardShowing = false + } + + /** Private flags to use within the project */ + private var _keyboardManagerFlags = flags(isTextFieldViewFrameChanged: false, isKeyboardShowing: false) + /** To use with keyboardDistanceFromTextField. */ private var _privateKeyboardDistanceFromTextField: CGFloat = 10.0 /**************************************************************************************/ - ///-------------------------------------- /// MARK: Initialization/Deinitialization ///-------------------------------------- @@ -632,8 +670,8 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _toolbarPreviousNextConsideredClass.addObject(NSStringFromClass(UICollectionView)) } - /** Override +load method to enable KeyboardManager when class loader load IQKeyboardManager. Enabling when app starts (No need to write any code) */ + /** It doesn't work on Swift 1.2 */ // override class func load() { // super.load() // @@ -652,8 +690,8 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { /** Getting keyWindow. */ private func keyWindow() -> UIWindow? { - if _textFieldView?.window != nil { - return _textFieldView?.window + if let keyWindow = _textFieldView?.window { + return keyWindow } else { struct Static { @@ -675,8 +713,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { return Static.keyWindow } } - - + ///----------------------- /// MARK: Helper Functions ///----------------------- @@ -717,7 +754,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _IQShowLog("You must set UIWindow.rootViewController in your AppDelegate to work with IQKeyboardManager") } } - + /* Adjusting RootViewController's frame according to device orientation. */ private func adjustFrame() { @@ -726,10 +763,12 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { return } + let textFieldView = _textFieldView! + _IQShowLog("****** \(__FUNCTION__) %@ started ******") // Boolean to know keyboard is showing/hiding - _isKeyboardShowing = true + _keyboardManagerFlags.isKeyboardShowing = true // Getting KeyWindow object. let optionalWindow = keyWindow() @@ -741,7 +780,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { } // Converting Rectangle according to window bounds. - let optionalTextFieldViewRect = _textFieldView?.superview?.convertRect(_textFieldView!.frame, toView: optionalWindow) + let optionalTextFieldViewRect = textFieldView.superview?.convertRect(textFieldView.frame, toView: optionalWindow) if optionalRootController == nil || optionalWindow == nil || optionalTextFieldViewRect == nil { return @@ -749,7 +788,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { let rootController = optionalRootController! let window = optionalWindow! - let textFieldView = _textFieldView! let textFieldViewRect = optionalTextFieldViewRect! //If it's iOS8 then we should do calculations according to portrait orientations. // (Bug ID: #64, #66) @@ -757,17 +795,21 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { // Getting RootViewRect. var rootViewRect = rootController.view.frame - //Getting statusBarFrame var topLayoutGuide : CGFloat = 0 + //Maintain keyboardDistanceFromTextField + let newKeyboardDistanceFromTextField = (textFieldView.keyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance) ? keyboardDistanceFromTextField : textFieldView.keyboardDistanceFromTextField + var kbSize = _kbSize; let statusBarFrame = UIApplication.sharedApplication().statusBarFrame switch interfaceOrientation { case UIInterfaceOrientation.LandscapeLeft, UIInterfaceOrientation.LandscapeRight: topLayoutGuide = CGRectGetWidth(statusBarFrame) + kbSize.width += newKeyboardDistanceFromTextField case UIInterfaceOrientation.Portrait, UIInterfaceOrientation.PortraitUpsideDown: topLayoutGuide = CGRectGetHeight(statusBarFrame) + kbSize.height += newKeyboardDistanceFromTextField default: break } @@ -778,20 +820,20 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { // Calculating move position. Common for both normal and special cases. switch interfaceOrientation { case UIInterfaceOrientation.LandscapeLeft: - move = min(CGRectGetMinX(textFieldViewRect)-(topLayoutGuide+5), CGRectGetMaxX(textFieldViewRect)-(CGRectGetWidth(window.frame)-_kbSize.width)) + move = min(CGRectGetMinX(textFieldViewRect)-(topLayoutGuide+5), CGRectGetMaxX(textFieldViewRect)-(CGRectGetWidth(window.frame)-kbSize.width)) case UIInterfaceOrientation.LandscapeRight: - move = min(CGRectGetWidth(window.frame)-CGRectGetMaxX(textFieldViewRect)-(topLayoutGuide+5), _kbSize.width-CGRectGetMinX(textFieldViewRect)) + move = min(CGRectGetWidth(window.frame)-CGRectGetMaxX(textFieldViewRect)-(topLayoutGuide+5), kbSize.width-CGRectGetMinX(textFieldViewRect)) case UIInterfaceOrientation.Portrait: - move = min(CGRectGetMinY(textFieldViewRect)-(topLayoutGuide+5), CGRectGetMaxY(textFieldViewRect)-(CGRectGetHeight(window.frame)-_kbSize.height)) + move = min(CGRectGetMinY(textFieldViewRect)-(topLayoutGuide+5), CGRectGetMaxY(textFieldViewRect)-(CGRectGetHeight(window.frame)-kbSize.height)) case UIInterfaceOrientation.PortraitUpsideDown: - move = min(CGRectGetHeight(window.frame)-CGRectGetMaxY(textFieldViewRect)-(topLayoutGuide+5), _kbSize.height-CGRectGetMinY(textFieldViewRect)) + move = min(CGRectGetHeight(window.frame)-CGRectGetMaxY(textFieldViewRect)-(topLayoutGuide+5), kbSize.height-CGRectGetMinY(textFieldViewRect)) default: break } _IQShowLog("Need to move: \(move)") // Getting it's superScrollView. // (Enhancement ID: #21, #24) - let superScrollView : UIScrollView? = textFieldView.superviewOfClassType(UIScrollView) as? UIScrollView + let superScrollView = textFieldView.superviewOfClassType(UIScrollView) as? UIScrollView //If there was a lastScrollView. // (Bug ID: #34) if let lastScrollView = _lastScrollView { @@ -844,8 +886,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _IQShowLog("Saving \(unwrappedSuperScrollView._IQDescription()) contentInset : \(_startingContentInsets) and contentOffset : \(_startingContentOffset)") } - - + // Special case for ScrollView. // If we found lastScrollView then setting it's contentOffset to show textField. if let lastScrollView = _lastScrollView { @@ -856,7 +897,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { while let scrollView = superScrollView { //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object. - if move > 0 ? move > -scrollView.contentOffset.y - scrollView.contentInset.top : scrollView.contentOffset.y>0 { + if move > 0 ? (move > (-scrollView.contentOffset.y - scrollView.contentInset.top)) : scrollView.contentOffset.y>0 { //Getting lastViewRect. if let lastViewRect = lastView.superview?.convertRect(lastView.frame, toView: scrollView) { @@ -867,11 +908,11 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { //Rearranging the expected Y offset according to the view. shouldOffsetY = min(shouldOffsetY, lastViewRect.origin.y /*-5*/) //-5 is for good UI.//Commenting -5 (Bug ID: #69) - + //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type //[superScrollView superviewOfClassType:[UIScrollView class]] == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierrchy.) //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type - //shouldOffsetY > 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) - if textFieldView is UITextView == true && scrollView.superviewOfClassType(UIScrollView) == nil && shouldOffsetY > 0 { + //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) + if textFieldView is UITextView == true && scrollView.superviewOfClassType(UIScrollView) == nil && shouldOffsetY >= 0 { var maintainTopLayout : CGFloat = 0 if let navigationBarFrame = textFieldView.viewController()?.navigationController?.navigationBar.frame { @@ -914,8 +955,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { move -= (shouldOffsetY-scrollView.contentOffset.y) } - - //Getting problem while using `setContentOffset:animated:`, So I used animation API. UIView.animateWithDuration(_animationDuration, delay: 0, options: UIViewAnimationOptions.BeginFromCurrentState|_animationCurve, animations: { () -> Void in @@ -934,7 +973,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { break } } - //Updating contentInset if let lastScrollViewRect = lastScrollView.superview?.convertRect(lastScrollView.frame, toView: window) { @@ -943,13 +981,13 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { switch interfaceOrientation { case UIInterfaceOrientation.LandscapeLeft: - bottom = _kbSize.width-(CGRectGetWidth(window.frame)-CGRectGetMaxX(lastScrollViewRect)) + bottom = kbSize.width-(CGRectGetWidth(window.frame)-CGRectGetMaxX(lastScrollViewRect)) case UIInterfaceOrientation.LandscapeRight: - bottom = _kbSize.width-CGRectGetMinX(lastScrollViewRect) + bottom = kbSize.width-CGRectGetMinX(lastScrollViewRect) case UIInterfaceOrientation.Portrait: - bottom = _kbSize.height-(CGRectGetHeight(window.frame)-CGRectGetMaxY(lastScrollViewRect)) + bottom = kbSize.height-(CGRectGetHeight(window.frame)-CGRectGetMaxY(lastScrollViewRect)) case UIInterfaceOrientation.PortraitUpsideDown: - bottom = _kbSize.height-CGRectGetMinY(lastScrollViewRect) + bottom = kbSize.height-CGRectGetMinY(lastScrollViewRect) default: break } @@ -982,20 +1020,19 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { } //Going ahead. No else if. - //Special case for UITextView(Readjusting the move variable when textView hight is too big to fit on screen) //_canAdjustTextView If we have permission to adjust the textView, then let's do it on behalf of user (Enhancement ID: #15) //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView. //[_textFieldView isKindOfClass:[UITextView class]] If is a UITextView type //_isTextFieldViewFrameChanged If frame is not change by library in past (Bug ID: #92) - if canAdjustTextView == true && _lastScrollView == nil && textFieldView is UITextView == true && _isTextFieldViewFrameChanged == false { + if canAdjustTextView == true && _lastScrollView == nil && textFieldView is UITextView == true && _keyboardManagerFlags.isTextFieldViewFrameChanged == false { var textViewHeight = CGRectGetHeight(textFieldView.frame) switch interfaceOrientation { case UIInterfaceOrientation.LandscapeLeft, UIInterfaceOrientation.LandscapeRight: - textViewHeight = min(textViewHeight, (CGRectGetWidth(window.frame)-_kbSize.width-(topLayoutGuide+5))) + textViewHeight = min(textViewHeight, (CGRectGetWidth(window.frame)-kbSize.width-(topLayoutGuide+5))) case UIInterfaceOrientation.Portrait, UIInterfaceOrientation.PortraitUpsideDown: - textViewHeight = min(textViewHeight, (CGRectGetHeight(window.frame)-_kbSize.height-(topLayoutGuide+5))) + textViewHeight = min(textViewHeight, (CGRectGetHeight(window.frame)-kbSize.height-(topLayoutGuide+5))) default: break } @@ -1006,125 +1043,176 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { var textFieldViewRect = textFieldView.frame textFieldViewRect.size.height = textViewHeight textFieldView.frame = textFieldViewRect - self._isTextFieldViewFrameChanged = true + self._keyboardManagerFlags.isTextFieldViewFrameChanged = true self._IQShowLog("\(textFieldView._IQDescription()) New Frame : \(textFieldView.frame)") }, completion: { (finished) -> Void in }) } + + var hasDoneTweakLayoutGuide = false - // Special case for iPad modalPresentationStyle. - if rootController.modalPresentationStyle == UIModalPresentationStyle.FormSheet || rootController.modalPresentationStyle == UIModalPresentationStyle.PageSheet { + if let viewController = textFieldView.viewController() { - _IQShowLog("Found Special case for Model Presentation Style: \(rootController.modalPresentationStyle)") - - // Positive or zero. - if move >= 0 { - // We should only manipulate y. - rootViewRect.origin.y -= move + if let constraint = viewController.IQLayoutGuideConstraint { - // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) - if preventShowingBottomBlankSpace == true { - var minimumY: CGFloat = 0 + var layoutGuide : UILayoutSupport? + if let itemLayoutGuide = constraint.firstItem as? UILayoutSupport { + layoutGuide = itemLayoutGuide + } else if let itemLayoutGuide = constraint.secondItem as? UILayoutSupport { + layoutGuide = itemLayoutGuide + } + + if let itemLayoutGuide : UILayoutSupport = layoutGuide { - switch interfaceOrientation { - case UIInterfaceOrientation.LandscapeLeft, UIInterfaceOrientation.LandscapeRight: - minimumY = CGRectGetWidth(window.frame)-rootViewRect.size.height-topLayoutGuide-(_kbSize.width-keyboardDistanceFromTextField) - case UIInterfaceOrientation.Portrait, UIInterfaceOrientation.PortraitUpsideDown: - minimumY = (CGRectGetHeight(window.frame)-rootViewRect.size.height-topLayoutGuide)/2-(_kbSize.height-keyboardDistanceFromTextField) - default: break + if (itemLayoutGuide === viewController.topLayoutGuide) //If topLayoutGuide constraint + { + let constant = min(_layoutGuideConstraintInitialConstant, constraint.constant-move); + + UIView.animateWithDuration(_animationDuration, delay: 0, options: (_animationCurve|UIViewAnimationOptions.BeginFromCurrentState), animations: { () -> Void in + + constraint.constant = constant; + self._rootViewController?.view.setNeedsLayout() + self._rootViewController?.view.layoutIfNeeded() + + }, completion: { (finished) -> Void in }) + + hasDoneTweakLayoutGuide = true } - - rootViewRect.origin.y = max(CGRectGetMinY(rootViewRect), minimumY) - } - - _IQShowLog("Moving Upward") - // Setting adjusted rootViewRect - setRootViewFrame(rootViewRect) - } else { // Negative - // Calculating disturbed distance. Pull Request #3 - let disturbDistance = CGRectGetMinY(rootViewRect)-CGRectGetMinY(_topViewBeginRect) - - // disturbDistance Negative = frame disturbed. - // disturbDistance positive = frame not disturbed. - if disturbDistance < 0 { - // We should only manipulate y. - rootViewRect.origin.y -= max(move, disturbDistance) + else if (itemLayoutGuide === viewController.bottomLayoutGuide) //If bottomLayoutGuice constraint + { + let constant = max(_layoutGuideConstraintInitialConstant, constraint.constant+move); + + UIView.animateWithDuration(_animationDuration, delay: 0, options: (_animationCurve|UIViewAnimationOptions.BeginFromCurrentState), animations: { () -> Void in + + constraint.constant = constant; + self._rootViewController?.view.setNeedsLayout() + self._rootViewController?.view.layoutIfNeeded() + + }, completion: { (finished) -> Void in }) - _IQShowLog("Moving Downward") - // Setting adjusted rootViewRect - setRootViewFrame(rootViewRect) - } - } - } else { //If presentation style is neither UIModalPresentationFormSheet nor UIModalPresentationPageSheet then going ahead.(General case) - // Positive or zero. - if move >= 0 { - - switch interfaceOrientation { - case UIInterfaceOrientation.LandscapeLeft: rootViewRect.origin.x -= move - case UIInterfaceOrientation.LandscapeRight: rootViewRect.origin.x += move - case UIInterfaceOrientation.Portrait: rootViewRect.origin.y -= move - case UIInterfaceOrientation.PortraitUpsideDown: rootViewRect.origin.y += move - default: break - } - - // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) - if preventShowingBottomBlankSpace == true { - - switch interfaceOrientation { - case UIInterfaceOrientation.LandscapeLeft: - rootViewRect.origin.x = max(rootViewRect.origin.x, min(0, -_kbSize.width+keyboardDistanceFromTextField)) - case UIInterfaceOrientation.LandscapeRight: - rootViewRect.origin.x = min(rootViewRect.origin.x, +_kbSize.width-keyboardDistanceFromTextField) - case UIInterfaceOrientation.Portrait: - rootViewRect.origin.y = max(rootViewRect.origin.y, min(0, -_kbSize.height+keyboardDistanceFromTextField)) - case UIInterfaceOrientation.PortraitUpsideDown: - rootViewRect.origin.y = min(rootViewRect.origin.y, +_kbSize.height-keyboardDistanceFromTextField) - default: break + hasDoneTweakLayoutGuide = true } } - - _IQShowLog("Moving Upward") - // Setting adjusted rootViewRect - setRootViewFrame(rootViewRect) - } else { // Negative - var disturbDistance : CGFloat = 0 - - switch interfaceOrientation { - case UIInterfaceOrientation.LandscapeLeft: - disturbDistance = CGRectGetMinX(rootViewRect)-CGRectGetMinX(_topViewBeginRect) - case UIInterfaceOrientation.LandscapeRight: - disturbDistance = CGRectGetMinX(_topViewBeginRect)-CGRectGetMinX(rootViewRect) - case UIInterfaceOrientation.Portrait: - disturbDistance = CGRectGetMinY(rootViewRect)-CGRectGetMinY(_topViewBeginRect) - case UIInterfaceOrientation.PortraitUpsideDown: - disturbDistance = CGRectGetMinY(_topViewBeginRect)-CGRectGetMinY(rootViewRect) - default: break - } - - // disturbDistance Negative = frame disturbed. - // disturbDistance positive = frame not disturbed. - if disturbDistance < 0 { - - switch interfaceOrientation { - case UIInterfaceOrientation.LandscapeLeft: rootViewRect.origin.x -= max(move, disturbDistance) - case UIInterfaceOrientation.LandscapeRight: rootViewRect.origin.x += max(move, disturbDistance) - case UIInterfaceOrientation.Portrait: rootViewRect.origin.y -= max(move, disturbDistance) - case UIInterfaceOrientation.PortraitUpsideDown: rootViewRect.origin.y += max(move, disturbDistance) - default: break - } - - _IQShowLog("Moving Downward") - // Setting adjusted rootViewRect - // Setting adjusted rootViewRect - setRootViewFrame(rootViewRect) - } } } + + //If not constraint + if hasDoneTweakLayoutGuide == false { + + // Special case for iPad modalPresentationStyle. + if rootController.modalPresentationStyle == UIModalPresentationStyle.FormSheet || rootController.modalPresentationStyle == UIModalPresentationStyle.PageSheet { + + _IQShowLog("Found Special case for Model Presentation Style: \(rootController.modalPresentationStyle)") + + // +Positive or zero. + if move >= 0 { + // We should only manipulate y. + rootViewRect.origin.y -= move + + // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) + if preventShowingBottomBlankSpace == true { + var minimumY: CGFloat = 0 + + switch interfaceOrientation { + case UIInterfaceOrientation.LandscapeLeft, UIInterfaceOrientation.LandscapeRight: + minimumY = CGRectGetWidth(window.frame)-rootViewRect.size.height-topLayoutGuide-(kbSize.width-newKeyboardDistanceFromTextField) + case UIInterfaceOrientation.Portrait, UIInterfaceOrientation.PortraitUpsideDown: + minimumY = (CGRectGetHeight(window.frame)-rootViewRect.size.height-topLayoutGuide)/2-(kbSize.height-newKeyboardDistanceFromTextField) + default: break + } + + rootViewRect.origin.y = max(CGRectGetMinY(rootViewRect), minimumY) + } + + _IQShowLog("Moving Upward") + // Setting adjusted rootViewRect + setRootViewFrame(rootViewRect) + } else { // -Negative + // Calculating disturbed distance. Pull Request #3 + let disturbDistance = CGRectGetMinY(rootViewRect)-CGRectGetMinY(_topViewBeginRect) + + // disturbDistance Negative = frame disturbed. + // disturbDistance positive = frame not disturbed. + if disturbDistance < 0 { + // We should only manipulate y. + rootViewRect.origin.y -= max(move, disturbDistance) + + _IQShowLog("Moving Downward") + // Setting adjusted rootViewRect + setRootViewFrame(rootViewRect) + } + } + } else { //If presentation style is neither UIModalPresentationFormSheet nor UIModalPresentationPageSheet then going ahead.(General case) + // +Positive or zero. + if move >= 0 { + + switch interfaceOrientation { + case UIInterfaceOrientation.LandscapeLeft: rootViewRect.origin.x -= move + case UIInterfaceOrientation.LandscapeRight: rootViewRect.origin.x += move + case UIInterfaceOrientation.Portrait: rootViewRect.origin.y -= move + case UIInterfaceOrientation.PortraitUpsideDown: rootViewRect.origin.y += move + default: break + } + + // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) + if preventShowingBottomBlankSpace == true { + + switch interfaceOrientation { + case UIInterfaceOrientation.LandscapeLeft: + rootViewRect.origin.x = max(rootViewRect.origin.x, min(0, -kbSize.width+newKeyboardDistanceFromTextField)) + case UIInterfaceOrientation.LandscapeRight: + rootViewRect.origin.x = min(rootViewRect.origin.x, +kbSize.width-newKeyboardDistanceFromTextField) + case UIInterfaceOrientation.Portrait: + rootViewRect.origin.y = max(rootViewRect.origin.y, min(0, -kbSize.height+newKeyboardDistanceFromTextField)) + case UIInterfaceOrientation.PortraitUpsideDown: + rootViewRect.origin.y = min(rootViewRect.origin.y, +kbSize.height-newKeyboardDistanceFromTextField) + default: break + } + } + + _IQShowLog("Moving Upward") + // Setting adjusted rootViewRect + setRootViewFrame(rootViewRect) + } else { // -Negative + var disturbDistance : CGFloat = 0 + + switch interfaceOrientation { + case UIInterfaceOrientation.LandscapeLeft: + disturbDistance = CGRectGetMinX(rootViewRect)-CGRectGetMinX(_topViewBeginRect) + case UIInterfaceOrientation.LandscapeRight: + disturbDistance = CGRectGetMinX(_topViewBeginRect)-CGRectGetMinX(rootViewRect) + case UIInterfaceOrientation.Portrait: + disturbDistance = CGRectGetMinY(rootViewRect)-CGRectGetMinY(_topViewBeginRect) + case UIInterfaceOrientation.PortraitUpsideDown: + disturbDistance = CGRectGetMinY(_topViewBeginRect)-CGRectGetMinY(rootViewRect) + default: break + } + + // disturbDistance Negative = frame disturbed. + // disturbDistance positive = frame not disturbed. + if disturbDistance < 0 { + + switch interfaceOrientation { + case UIInterfaceOrientation.LandscapeLeft: rootViewRect.origin.x -= max(move, disturbDistance) + case UIInterfaceOrientation.LandscapeRight: rootViewRect.origin.x += max(move, disturbDistance) + case UIInterfaceOrientation.Portrait: rootViewRect.origin.y -= max(move, disturbDistance) + case UIInterfaceOrientation.PortraitUpsideDown: rootViewRect.origin.y += max(move, disturbDistance) + default: break + } + + _IQShowLog("Moving Downward") + // Setting adjusted rootViewRect + // Setting adjusted rootViewRect + setRootViewFrame(rootViewRect) + } + } + } + } + _IQShowLog("****** \(__FUNCTION__) ended ******") } - ///------------------------------- /// MARK: UIKeyboard Notifications ///------------------------------- @@ -1142,7 +1230,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { //Due to orientation callback we need to resave it's original frame. // (Bug ID: #46) //Added _isTextFieldViewFrameChanged check. Saving textFieldView current frame to use it with canAdjustTextView if textViewFrame has already not been changed. (Bug ID: #92) - if _isTextFieldViewFrameChanged == false { + if _keyboardManagerFlags.isTextFieldViewFrameChanged == false && _textFieldView != nil { if let textFieldView = _textFieldView { _textFieldViewIntialFrame = textFieldView.frame _IQShowLog("Saving \(textFieldView._IQDescription()) Initial frame : \(_textFieldViewIntialFrame)") @@ -1203,23 +1291,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { topMostController = keyWindow()?.topMostController() } - if let topController = topMostController { - //If it's iOS8 then we should do calculations according to portrait orientations. // (Bug ID: #64, #66) - let interfaceOrientation = (IQ_IS_IOS8_OR_GREATER) ? UIInterfaceOrientation.Portrait : topController.interfaceOrientation - - let _keyboardDistanceFromTextField = keyboardDistanceFromTextField - // let _keyboardDistanceFromTextField = (_textFieldView.keyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance)?_keyboardDistanceFromTextField:_textFieldView.keyboardDistanceFromTextField - - // Adding Keyboard distance from textField. - switch interfaceOrientation { - case UIInterfaceOrientation.LandscapeLeft, UIInterfaceOrientation.LandscapeRight: - _kbSize.width += _keyboardDistanceFromTextField - case UIInterfaceOrientation.Portrait, UIInterfaceOrientation.PortraitUpsideDown: - _kbSize.height += _keyboardDistanceFromTextField - default: break - } - } - //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not. if CGSizeEqualToSize(_kbSize, oldKBSize) == false { @@ -1273,7 +1344,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { // if (_textFieldView == nil) return // Boolean to know keyboard is showing/hiding - _isKeyboardShowing = false + _keyboardManagerFlags.isKeyboardShowing = false let info : [NSObject : AnyObject]? = notification?.userInfo @@ -1301,9 +1372,9 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { // TODO: restore scrollView state // This is temporary solution. Have to implement the save and restore scrollView state - var superScrollView = self._lastScrollView?.superviewOfClassType(UIScrollView) as? UIScrollView + var superScrollView = lastScrollView - while let scrollView = superScrollView { + while let scrollView = superScrollView.superviewOfClassType(UIScrollView) as? UIScrollView { let contentSize = CGSizeMake(max(scrollView.contentSize.width, CGRectGetWidth(scrollView.frame)), max(scrollView.contentSize.height, CGRectGetHeight(scrollView.frame))) @@ -1315,7 +1386,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { self._IQShowLog("Restoring \(scrollView._IQDescription()) contentOffset to : \(self._startingContentOffset)") } - superScrollView = superScrollView?.superviewOfClassType(UIScrollView) as? UIScrollView + superScrollView = scrollView } }) { (finished) -> Void in } } @@ -1333,18 +1404,46 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. UIView.animateWithDuration(_animationDuration, delay: 0, options: UIViewAnimationOptions.BeginFromCurrentState|_animationCurve, animations: { () -> Void in - self._IQShowLog("Restoring \(rootViewController._IQDescription()) frame to : \(self._topViewBeginRect)") + var hasDoneTweakLayoutGuide = false - // Setting it's new frame - rootViewController.view.frame = self._topViewBeginRect - - //Animating content if needed (Bug ID: #204) - if self.layoutIfNeededOnUpdate == true { - //Animating content (Bug ID: #160) - rootViewController.view.setNeedsLayout() - rootViewController.view.layoutIfNeeded() + if let viewController = self._textFieldView?.viewController() { + + if let constraint = viewController.IQLayoutGuideConstraint { + + var layoutGuide : UILayoutSupport? + if let itemLayoutGuide = constraint.firstItem as? UILayoutSupport { + layoutGuide = itemLayoutGuide + } else if let itemLayoutGuide = constraint.secondItem as? UILayoutSupport { + layoutGuide = itemLayoutGuide + } + + if let itemLayoutGuide : UILayoutSupport = layoutGuide { + + if (itemLayoutGuide === viewController.topLayoutGuide || itemLayoutGuide === viewController.bottomLayoutGuide) + { + constraint.constant = self._layoutGuideConstraintInitialConstant + rootViewController.view.setNeedsLayout() + rootViewController.view.layoutIfNeeded() + + hasDoneTweakLayoutGuide = true + } + } + } } + if hasDoneTweakLayoutGuide == false { + self._IQShowLog("Restoring \(rootViewController._IQDescription()) frame to : \(self._topViewBeginRect)") + + // Setting it's new frame + rootViewController.view.frame = self._topViewBeginRect + + //Animating content if needed (Bug ID: #204) + if self.layoutIfNeededOnUpdate == true { + //Animating content (Bug ID: #160) + rootViewController.view.setNeedsLayout() + rootViewController.view.layoutIfNeeded() + } + } }) { (finished) -> Void in } _rootViewController = nil @@ -1362,7 +1461,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _IQShowLog("****** \(__FUNCTION__) ended ******") } - func keyboardDidHide(notification:NSNotification) { _IQShowLog("****** \(__FUNCTION__) started ******") @@ -1405,7 +1503,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { // Saving textFieldView current frame to use it with canAdjustTextView if textViewFrame has already not been changed. //Added _isTextFieldViewFrameChanged check. (Bug ID: #92) - if _isTextFieldViewFrameChanged == false { + if _keyboardManagerFlags.isTextFieldViewFrameChanged == false { if let textFieldView = _textFieldView { _textFieldViewIntialFrame = textFieldView.frame _IQShowLog("Saving \(textFieldView._IQDescription()) Initial frame : \(_textFieldViewIntialFrame)") @@ -1426,6 +1524,16 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { }, completion: { (finished) -> Void in + //RestoringTextView before reloading inputViews + if (self._keyboardManagerFlags.isTextFieldViewFrameChanged) + { + self._keyboardManagerFlags.isTextFieldViewFrameChanged = false; + + if let textFieldView = self._textFieldView { + textFieldView.frame = self._textFieldViewIntialFrame; + } + } + //On textView toolbar didn't appear on first time, so forcing textView to reload it's inputViews. self._textFieldView?.reloadInputViews() }) @@ -1442,9 +1550,13 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _textFieldView?.window?.addGestureRecognizer(_tapGesture) // (Enhancement ID: #14) - if _isKeyboardShowing == false { // (Bug ID: #5) + if _keyboardManagerFlags.isKeyboardShowing == false { // (Bug ID: #5) // keyboard is not showing(At the beginning only). We should save rootViewRect. + if let constant = _textFieldView?.viewController()?.IQLayoutGuideConstraint?.constant { + _layoutGuideConstraintInitialConstant = constant + } + _rootViewController = _textFieldView?.topMostController() if _rootViewController == nil { _rootViewController = keyWindow()?.topMostController() @@ -1496,9 +1608,9 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _textFieldView?.window?.removeGestureRecognizer(_tapGesture) // We check if there's a change in original frame or not. - if _isTextFieldViewFrameChanged == true { + if _keyboardManagerFlags.isTextFieldViewFrameChanged == true { UIView.animateWithDuration(_animationDuration, delay: 0, options: UIViewAnimationOptions.BeginFromCurrentState|_animationCurve, animations: { () -> Void in - self._isTextFieldViewFrameChanged = false + self._keyboardManagerFlags.isTextFieldViewFrameChanged = false self._IQShowLog("Restoring \(self._textFieldView?._IQDescription()) frame to : \(self._textFieldViewIntialFrame)") @@ -1518,7 +1630,7 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { if shouldFixTextViewClip { let textView = notification.object as! UITextView - let line = textView .caretRectForPosition(textView.selectedTextRange?.start) + let line = textView.caretRectForPosition(textView.selectedTextRange?.start) let overflow = CGRectGetMaxY(line) - (textView.contentOffset.y + CGRectGetHeight(textView.bounds) - textView.contentInset.bottom - textView.contentInset.top) @@ -1537,7 +1649,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { } } - ///------------------------------------------ /// MARK: Interface Orientation Notifications ///------------------------------------------ @@ -1548,11 +1659,11 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _IQShowLog("****** \(__FUNCTION__) started ******") //If textFieldViewInitialRect is saved then restore it.(UITextView case @canAdjustTextView) - if _isTextFieldViewFrameChanged == true { + if _keyboardManagerFlags.isTextFieldViewFrameChanged == true { if let textFieldView = _textFieldView { //Due to orientation callback we need to set it's original position. UIView.animateWithDuration(_animationDuration, delay: 0, options: (_animationCurve|UIViewAnimationOptions.BeginFromCurrentState), animations: { () -> Void in - self._isTextFieldViewFrameChanged = false + self._keyboardManagerFlags.isTextFieldViewFrameChanged = false self._IQShowLog("Restoring \(textFieldView._IQDescription()) frame to : \(self._textFieldViewIntialFrame)") @@ -1566,7 +1677,6 @@ class IQKeyboardManager: NSObject, UIGestureRecognizerDelegate { _IQShowLog("****** \(__FUNCTION__) ended ******") } - ///------------------ /// MARK: AutoToolbar ///------------------ diff --git a/IQKeybordManagerSwift/IQTextView/IQTextView.swift b/IQKeybordManagerSwift/IQTextView/IQTextView.swift index 66cc923..c18e17d 100644 --- a/IQKeybordManagerSwift/IQTextView/IQTextView.swift +++ b/IQKeybordManagerSwift/IQTextView/IQTextView.swift @@ -29,8 +29,23 @@ class IQTextView : UITextView { required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) + NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshPlaceholder", name: UITextViewTextDidChangeNotification, object: self) } + override init(frame: CGRect, textContainer: NSTextContainer?) { + super.init(frame: frame, textContainer: textContainer) + NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshPlaceholder", name: UITextViewTextDidChangeNotification, object: self) + } + + override func awakeFromNib() { + super.awakeFromNib() + NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshPlaceholder", name: UITextViewTextDidChangeNotification, object: self) + } + + deinit { + NSNotificationCenter.defaultCenter().removeObserver(self) + } + private var placeholderLabel: UILabel? /** @abstract To set textView's placeholder text. Default is ni. */ diff --git a/IQKeybordManagerSwift/IQToolbar/IQTitleBarButtonItem.swift b/IQKeybordManagerSwift/IQToolbar/IQTitleBarButtonItem.swift index 93ed897..9fd4009 100644 --- a/IQKeybordManagerSwift/IQToolbar/IQTitleBarButtonItem.swift +++ b/IQKeybordManagerSwift/IQToolbar/IQTitleBarButtonItem.swift @@ -30,15 +30,16 @@ class IQTitleBarButtonItem: UIBarButtonItem { didSet { if let unwrappedFont = font { - titleLabel?.font = unwrappedFont + _titleLabel?.font = unwrappedFont } else { - titleLabel?.font = UIFont.boldSystemFontOfSize(12) + _titleLabel?.font = UIFont.boldSystemFontOfSize(12) } } } - private var titleLabel : UILabel? - + private var _titleLabel : UILabel? + private var _titleView : UIView? + override init() { super.init() } @@ -47,14 +48,19 @@ class IQTitleBarButtonItem: UIBarButtonItem { super.init(title: nil, style: UIBarButtonItemStyle.Plain, target: nil, action: nil) - titleLabel = UILabel(frame: frame) - titleLabel?.backgroundColor = UIColor.clearColor() - titleLabel?.textAlignment = .Center - titleLabel?.text = title - titleLabel?.autoresizingMask = .FlexibleWidth + _titleView = UIView(frame: frame) + _titleView?.backgroundColor = UIColor.clearColor() + _titleView?.autoresizingMask = .FlexibleWidth + + _titleLabel = UILabel(frame: _titleView!.bounds) + _titleLabel?.textColor = UIColor.lightGrayColor() + _titleLabel?.backgroundColor = UIColor.clearColor() + _titleLabel?.textAlignment = .Center + _titleLabel?.text = title + _titleLabel?.autoresizingMask = .FlexibleWidth font = UIFont.boldSystemFontOfSize(12.0) - titleLabel?.font = self.font - customView = titleLabel + _titleLabel?.font = self.font + customView = _titleLabel enabled = false } diff --git a/IQKeybordManagerSwift/IQToolbar/IQToolbar.swift b/IQKeybordManagerSwift/IQToolbar/IQToolbar.swift index f601647..a65e3aa 100644 --- a/IQKeybordManagerSwift/IQToolbar/IQToolbar.swift +++ b/IQKeybordManagerSwift/IQToolbar/IQToolbar.swift @@ -27,6 +27,14 @@ import UIKit /** @abstract IQToolbar for IQKeyboardManager. */ class IQToolbar: UIToolbar , UIInputViewAudioFeedback { + override class func initialize() { + + superclass()?.initialize() + + self.appearance().barTintColor = nil + self.appearance().backgroundColor = nil + } + var titleFont : UIFont? { didSet { @@ -62,7 +70,6 @@ class IQToolbar: UIToolbar , UIInputViewAudioFeedback { sizeToFit() autoresizingMask = UIViewAutoresizing.FlexibleWidth - tintColor = UIColor .blackColor() } @@ -71,7 +78,6 @@ class IQToolbar: UIToolbar , UIInputViewAudioFeedback { sizeToFit() autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight - tintColor = UIColor .blackColor() } @@ -84,11 +90,11 @@ class IQToolbar: UIToolbar , UIInputViewAudioFeedback { override var tintColor: UIColor! { didSet { - if items != nil { - for item in items as! [UIBarButtonItem] { + if let unwrappedItems = items { + for item in unwrappedItems as! [UIBarButtonItem] { if item is IQTitleBarButtonItem { - (item as! IQTitleBarButtonItem).tintColor = tintColor + item.tintColor = tintColor } } } diff --git a/IQKeybordManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift b/IQKeybordManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift index be68ebf..013be18 100644 --- a/IQKeybordManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift +++ b/IQKeybordManagerSwift/IQToolbar/IQUIView+IQKeyboardToolbar.swift @@ -25,6 +25,8 @@ import Foundation import UIKit +private var kIQShouldHideTitle = "kIQShouldHideTitle" + /** UIView category methods to add IQToolbar on UIKeyboard. */ @@ -39,7 +41,7 @@ extension UIView { */ var shouldHideTitle: Bool? { get { - let aValue: AnyObject? = objc_getAssociatedObject(self, "shouldHideTitle") + let aValue: AnyObject? = objc_getAssociatedObject(self, &kIQShouldHideTitle) if aValue == nil { return false @@ -48,7 +50,7 @@ extension UIView { } } set(newValue) { - objc_setAssociatedObject(self, "shouldHideTitle", newValue, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) + objc_setAssociatedObject(self, &kIQShouldHideTitle, newValue, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) } } @@ -452,7 +454,7 @@ extension UIView { var items : [UIBarButtonItem] = [] // Create a cancel button to show on keyboard to resign it. Adding a selector to resign it. - let cancelButton = IQBarButtonItem(title: leftButtonTitle, style: UIBarButtonItemStyle.Bordered, target: target, action: leftButtonAction) + let cancelButton = IQBarButtonItem(title: leftButtonTitle, style: UIBarButtonItemStyle.Plain, target: target, action: leftButtonAction) items.append(cancelButton) if let unwrappedTitleText = titleText { @@ -474,7 +476,7 @@ extension UIView { items.append(nilButton) // Create a done button to show on keyboard to resign it. Adding a selector to resign it. - let doneButton = IQBarButtonItem(title: rightButtonTitle, style: UIBarButtonItemStyle.Bordered, target: target, action: rightButtonAction) + let doneButton = IQBarButtonItem(title: rightButtonTitle, style: UIBarButtonItemStyle.Plain, target: target, action: rightButtonAction) items.append(doneButton) // Adding button to toolBar. @@ -686,7 +688,7 @@ extension UIView { var items : [UIBarButtonItem] = [] // Create a done button to show on keyboard to resign it. Adding a selector to resign it. - let doneButton = IQBarButtonItem(title: rightButtonTitle, style: UIBarButtonItemStyle.Bordered, target: target, action: rightButtonAction) + let doneButton = IQBarButtonItem(title: rightButtonTitle, style: UIBarButtonItemStyle.Plain, target: target, action: rightButtonAction) let prev = IQBarButtonItem(image: UIImage(named: "IQKeyboardManager.bundle/IQButtonBarArrowLeft"), style: UIBarButtonItemStyle.Plain, target: target, action: previousAction) diff --git a/KeyboardTextFieldDemo/IQKeyboardManager Swift/Base.lproj/LaunchScreen.xib b/KeyboardTextFieldDemo/IQKeyboardManager Swift/Base.lproj/LaunchScreen.xib deleted file mode 100644 index 26792bb..0000000 --- a/KeyboardTextFieldDemo/IQKeyboardManager Swift/Base.lproj/LaunchScreen.xib +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/KeyboardTextFieldDemo/IQKeyboardManager Swift/Info.plist b/KeyboardTextFieldDemo/IQKeyboardManager Swift/Info.plist index 0edaa90..440ca49 100644 --- a/KeyboardTextFieldDemo/IQKeyboardManager Swift/Info.plist +++ b/KeyboardTextFieldDemo/IQKeyboardManager Swift/Info.plist @@ -22,8 +22,6 @@ 1 LSRequiresIPhoneOS - UILaunchStoryboardName - LaunchScreen UIMainStoryboardFile MainSwift UIRequiredDeviceCapabilities diff --git a/KeyboardTextFieldDemo/IQKeyboardManager Swift/Swift Pending.rtf b/KeyboardTextFieldDemo/IQKeyboardManager Swift/Swift Pending.rtf index 0b19c6a..bc78a7a 100644 --- a/KeyboardTextFieldDemo/IQKeyboardManager Swift/Swift Pending.rtf +++ b/KeyboardTextFieldDemo/IQKeyboardManager Swift/Swift Pending.rtf @@ -1,18 +1,14 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf140 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\rtf1\ansi\ansicpg1252\cocoartf1347\cocoasubrtf570 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 Menlo-Regular;} {\colortbl;\red255\green255\blue255;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid1\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listname ;}\listid1} -{\list\listtemplateid2\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid101\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listname ;}\listid2}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}} \margl1440\margr1440\vieww9000\viewh8400\viewkind0 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural -\f0\b\fs24 \cf0 \ -\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural -\ls1\ilvl0\cf0 {\listtext 1. }Need to Convert NSMutableSet to swift Array\ -\pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\li720\fi-720\pardirnatural -\ls2\ilvl0\cf0 {\listtext 2. }Need to convert NSArray to swift Array\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural -\cf0 \ -\ +\f0\fs24 \cf0 \ + 1. Need to Convert NSMutableSet to swift Array\ + 2. Need to convert NSArray to swift Array\ + 3. +\f1\fs26 setCustomDoneTarget on IQUIView+IQKeyboardToolbar.swift\ + 4. Need to match IQUIView+IQKeyboardToolbar.swift with Objective-C Version\ + 5. Debug Hierarchy on IQUIView+Hierarchy.swift\ } \ No newline at end of file diff --git a/KeyboardTextFieldDemo/IQKeyboardManager.xcodeproj/project.pbxproj b/KeyboardTextFieldDemo/IQKeyboardManager.xcodeproj/project.pbxproj index 84bfd0e..5074eaf 100755 --- a/KeyboardTextFieldDemo/IQKeyboardManager.xcodeproj/project.pbxproj +++ b/KeyboardTextFieldDemo/IQKeyboardManager.xcodeproj/project.pbxproj @@ -93,7 +93,6 @@ C0A392161B208F8300783FDD /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = C0A392141B208F8300783FDD /* IQUIViewController+Additions.m */; }; C0AB9307195F57BB00447049 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9DC4CE2E18DAF77300DB2CB0 /* Main.storyboard */; }; C0ACB10119CF104E0057B571 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C0ACB10019CF104E0057B571 /* Images.xcassets */; }; - C0ACB10419CF104F0057B571 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = C0ACB10219CF104F0057B571 /* LaunchScreen.xib */; }; C0B63BA01781FAB1008D3B64 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0B63B9F1781FAB1008D3B64 /* UIKit.framework */; }; C0B63BA21781FAB1008D3B64 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0B63BA11781FAB1008D3B64 /* Foundation.framework */; }; C0B63BA41781FAB1008D3B64 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0B63BA31781FAB1008D3B64 /* CoreGraphics.framework */; }; @@ -112,6 +111,8 @@ C0DDEB6C19FCD56300FAB29F /* IQToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DDEB5D19FCD56300FAB29F /* IQToolbar.swift */; }; C0DDEB6D19FCD56300FAB29F /* IQUIView+IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0DDEB5E19FCD56300FAB29F /* IQUIView+IQKeyboardToolbar.swift */; }; C0DDEB6E19FCD56300FAB29F /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C0DDEB6019FCD56300FAB29F /* IQKeyboardManager.bundle */; }; + C0E9FD191B7E01F400C62579 /* IQUITextFieldView+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0E9FD171B7E01E500C62579 /* IQUITextFieldView+Additions.swift */; }; + C0E9FD1C1B7E021000C62579 /* IQUIViewController+Additions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0E9FD1A1B7E020E00C62579 /* IQUIViewController+Additions.swift */; }; C0EC59D219D0C0B100997FFE /* TextFieldViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0EC59D119D0C0B100997FFE /* TextFieldViewController.swift */; }; C0EC59D419D0C0C600997FFE /* ScrollViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0EC59D319D0C0C600997FFE /* ScrollViewController.swift */; }; C0EC59D619D0C0D200997FFE /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0EC59D519D0C0D200997FFE /* WebViewController.swift */; }; @@ -217,16 +218,15 @@ C08A654C19DB18C700D255E2 /* ManualToolbarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ManualToolbarViewController.m; sourceTree = ""; }; C08B91B719D7558800AF16E7 /* TextSelectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextSelectionViewController.h; sourceTree = ""; }; C08B91B819D7558800AF16E7 /* TextSelectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextSelectionViewController.m; sourceTree = ""; }; - C08CE0BC1A5C5EAC00FD9273 /* Swift Pending.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; name = "Swift Pending.rtf"; path = "IQKeyboardManager Swift/Swift Pending.rtf"; sourceTree = ""; }; + C08CE0BC1A5C5EAC00FD9273 /* Swift Pending.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; name = "Swift Pending.rtf"; path = "../IQKeyboardManager Swift/Swift Pending.rtf"; sourceTree = ""; }; C09576A719D811E00081DEB9 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; C0A392111B208F8300783FDD /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUITextFieldView+Additions.h"; sourceTree = ""; }; C0A392121B208F8300783FDD /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUITextFieldView+Additions.m"; sourceTree = ""; }; C0A392131B208F8300783FDD /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIViewController+Additions.h"; sourceTree = ""; }; C0A392141B208F8300783FDD /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIViewController+Additions.m"; sourceTree = ""; }; C0ACB0F519CF104B0057B571 /* IQKeyboardManager Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "IQKeyboardManager Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - C0ACB0F819CF104D0057B571 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C0ACB0F819CF104D0057B571 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../IQKeyboardManager Swift/Info.plist"; sourceTree = ""; }; C0ACB10019CF104E0057B571 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "../IQKeyboardManager Swift/Images.xcassets"; sourceTree = ""; }; - C0ACB10319CF104F0057B571 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; C0B63B9B1781FAB1008D3B64 /* IQKeyboardManager.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IQKeyboardManager.app; sourceTree = BUILT_PRODUCTS_DIR; }; C0B63B9F1781FAB1008D3B64 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; C0B63BA11781FAB1008D3B64 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -238,7 +238,7 @@ C0B63BAF1781FAB1008D3B64 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; C0DDEB4E19FCD56300FAB29F /* IQNSArray+Sort.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQNSArray+Sort.swift"; sourceTree = ""; }; C0DDEB4F19FCD56300FAB29F /* IQUIView+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "IQUIView+Hierarchy.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - C0DDEB5019FCD56300FAB29F /* IQUIWindow+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "IQUIWindow+Hierarchy.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C0DDEB5019FCD56300FAB29F /* IQUIWindow+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "IQUIWindow+Hierarchy.swift"; sourceTree = ""; }; C0DDEB5219FCD56300FAB29F /* IQKeyboardManagerConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQKeyboardManagerConstants.swift; sourceTree = ""; }; C0DDEB5319FCD56300FAB29F /* IQKeyboardManagerConstantsInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQKeyboardManagerConstantsInternal.swift; sourceTree = ""; }; C0DDEB5419FCD56300FAB29F /* IQKeyboardManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = IQKeyboardManager.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; @@ -247,8 +247,10 @@ C0DDEB5B19FCD56300FAB29F /* IQBarButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQBarButtonItem.swift; sourceTree = ""; }; C0DDEB5C19FCD56300FAB29F /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQTitleBarButtonItem.swift; sourceTree = ""; }; C0DDEB5D19FCD56300FAB29F /* IQToolbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IQToolbar.swift; sourceTree = ""; }; - C0DDEB5E19FCD56300FAB29F /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "IQUIView+IQKeyboardToolbar.swift"; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; + C0DDEB5E19FCD56300FAB29F /* IQUIView+IQKeyboardToolbar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = "IQUIView+IQKeyboardToolbar.swift"; sourceTree = ""; }; C0DDEB6019FCD56300FAB29F /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = IQKeyboardManager.bundle; sourceTree = ""; }; + C0E9FD171B7E01E500C62579 /* IQUITextFieldView+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQUITextFieldView+Additions.swift"; sourceTree = ""; }; + C0E9FD1A1B7E020E00C62579 /* IQUIViewController+Additions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IQUIViewController+Additions.swift"; sourceTree = ""; }; C0EC59D119D0C0B100997FFE /* TextFieldViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TextFieldViewController.swift; path = "IQKeyboardManager Swift/TextFieldViewController.swift"; sourceTree = ""; }; C0EC59D319D0C0C600997FFE /* ScrollViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ScrollViewController.swift; path = "IQKeyboardManager Swift/ScrollViewController.swift"; sourceTree = ""; }; C0EC59D519D0C0D200997FFE /* WebViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WebViewController.swift; path = "IQKeyboardManager Swift/WebViewController.swift"; sourceTree = ""; }; @@ -457,17 +459,6 @@ path = Resources; sourceTree = ""; }; - C08549D519FAA92E00973573 /* Swift Demo */ = { - isa = PBXGroup; - children = ( - C08CE0BC1A5C5EAC00FD9273 /* Swift Pending.rtf */, - C0DDEB4C19FCD56300FAB29F /* IQKeybordManagerSwift */, - C0DD7E9F19D0A0AE007604CF /* KeyboardTextFieldDemoSwift */, - C0ACB0F619CF104C0057B571 /* IQKeyboardManager Swift */, - ); - name = "Swift Demo"; - sourceTree = ""; - }; C0A25BD219D72AAA009E074D /* TableViewController Example */ = { isa = PBXGroup; children = ( @@ -477,27 +468,10 @@ name = "TableViewController Example"; sourceTree = ""; }; - C0ACB0F619CF104C0057B571 /* IQKeyboardManager Swift */ = { - isa = PBXGroup; - children = ( - C0ACB10219CF104F0057B571 /* LaunchScreen.xib */, - C0ACB0F719CF104D0057B571 /* Supporting Files */, - ); - path = "IQKeyboardManager Swift"; - sourceTree = ""; - }; - C0ACB0F719CF104D0057B571 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - C0ACB0F819CF104D0057B571 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; C0B63B901781FAB0008D3B64 = { isa = PBXGroup; children = ( - C08549D519FAA92E00973573 /* Swift Demo */, + C0DDEB4C19FCD56300FAB29F /* IQKeybordManagerSwift */, C085498E19FAA91E00973573 /* IQKeyBoardManager */, C0B63BA51781FAB1008D3B64 /* KeyboardTextFieldDemo */, C0DE7A3019D49D3400B6A582 /* Resources */, @@ -535,41 +509,9 @@ C0B63BA51781FAB1008D3B64 /* KeyboardTextFieldDemo */ = { isa = PBXGroup; children = ( - C05DD9FC1A591D2D00A6ECD4 /* IQDropDownTextField */, - C0ACB10019CF104E0057B571 /* Images.xcassets */, - C07E20C0185900BD001699A8 /* TextFieldViewController.h */, - C07E20C1185900BD001699A8 /* TextFieldViewController.m */, - C00EAA6B1858D5A500968DE2 /* ScrollViewController.h */, - C07E20B41858FF54001699A8 /* ScrollViewController.m */, - C07E20B918590085001699A8 /* WebViewController.h */, - C07E20BA18590085001699A8 /* WebViewController.m */, - C080A59018740EFF0088441B /* TextViewSpecialCaseViewController.h */, - C080A59118740EFF0088441B /* TextViewSpecialCaseViewController.m */, - 53CF2B7D1903D02200E3FDEA /* NavigationBarViewController.h */, - 53CF2B7E1903D02200E3FDEA /* NavigationBarViewController.m */, - 9D03F06D18BDC19400F4970D /* SpecialCaseViewController.h */, - 9D03F06E18BDC19400F4970D /* SpecialCaseViewController.m */, - 9D8E5DAA18BC8E1D005695CF /* ViewController.h */, - 9D8E5DAB18BC8E1D005695CF /* ViewController.m */, - C08B91B719D7558800AF16E7 /* TextSelectionViewController.h */, - C08B91B819D7558800AF16E7 /* TextSelectionViewController.m */, - C08A654B19DB18C700D255E2 /* ManualToolbarViewController.h */, - C08A654C19DB18C700D255E2 /* ManualToolbarViewController.m */, - C0F1193819EEDCD500708D17 /* BottomBlankSpaceViewController.h */, - C0F1193919EEDCD500708D17 /* BottomBlankSpaceViewController.m */, - C02790321A01404000FCB517 /* CollectionViewDemoController.h */, - C02790331A01404000FCB517 /* CollectionViewDemoController.m */, - DDAA29F01A320057002C0ED8 /* TableViewInContainerViewController.h */, - DDAA29F11A320057002C0ED8 /* TableViewInContainerViewController.m */, - 1C2270101AE69224003A9D15 /* CustomViewController.h */, - 1C2270111AE69224003A9D15 /* CustomViewController.m */, - 1C22700D1AE68EEE003A9D15 /* CustomSubclassView.h */, - 1C22700E1AE68EEE003A9D15 /* CustomSubclassView.m */, - C0A25BD219D72AAA009E074D /* TableViewController Example */, - C06579C119D60AAF00DAA3EA /* Settings */, + C0E9FD161B7DEEE800C62579 /* Swift */, + C0E9FD151B7DEEC900C62579 /* Objective-C */, 9DC4CE2E18DAF77300DB2CB0 /* Main.storyboard */, - C0B63BAE1781FAB1008D3B64 /* AppDelegate.h */, - C0B63BAF1781FAB1008D3B64 /* AppDelegate.m */, C0B63BA61781FAB1008D3B64 /* Supporting Files */, ); path = KeyboardTextFieldDemo; @@ -612,6 +554,7 @@ 1C1ADFC71AE51F74007A73E3 /* Settings */, ); name = KeyboardTextFieldDemoSwift; + path = ..; sourceTree = ""; }; C0DDEB4C19FCD56300FAB29F /* IQKeybordManagerSwift */ = { @@ -633,7 +576,9 @@ isa = PBXGroup; children = ( C0DDEB4E19FCD56300FAB29F /* IQNSArray+Sort.swift */, + C0E9FD171B7E01E500C62579 /* IQUITextFieldView+Additions.swift */, C0DDEB4F19FCD56300FAB29F /* IQUIView+Hierarchy.swift */, + C0E9FD1A1B7E020E00C62579 /* IQUIViewController+Additions.swift */, C0DDEB5019FCD56300FAB29F /* IQUIWindow+Hierarchy.swift */, ); path = Categories; @@ -683,6 +628,57 @@ name = Resources; sourceTree = ""; }; + C0E9FD151B7DEEC900C62579 /* Objective-C */ = { + isa = PBXGroup; + children = ( + C05DD9FC1A591D2D00A6ECD4 /* IQDropDownTextField */, + C0ACB10019CF104E0057B571 /* Images.xcassets */, + C07E20C0185900BD001699A8 /* TextFieldViewController.h */, + C07E20C1185900BD001699A8 /* TextFieldViewController.m */, + C00EAA6B1858D5A500968DE2 /* ScrollViewController.h */, + C07E20B41858FF54001699A8 /* ScrollViewController.m */, + C07E20B918590085001699A8 /* WebViewController.h */, + C07E20BA18590085001699A8 /* WebViewController.m */, + C080A59018740EFF0088441B /* TextViewSpecialCaseViewController.h */, + C080A59118740EFF0088441B /* TextViewSpecialCaseViewController.m */, + 53CF2B7D1903D02200E3FDEA /* NavigationBarViewController.h */, + 53CF2B7E1903D02200E3FDEA /* NavigationBarViewController.m */, + 9D03F06D18BDC19400F4970D /* SpecialCaseViewController.h */, + 9D03F06E18BDC19400F4970D /* SpecialCaseViewController.m */, + 9D8E5DAA18BC8E1D005695CF /* ViewController.h */, + 9D8E5DAB18BC8E1D005695CF /* ViewController.m */, + C08B91B719D7558800AF16E7 /* TextSelectionViewController.h */, + C08B91B819D7558800AF16E7 /* TextSelectionViewController.m */, + C08A654B19DB18C700D255E2 /* ManualToolbarViewController.h */, + C08A654C19DB18C700D255E2 /* ManualToolbarViewController.m */, + C0F1193819EEDCD500708D17 /* BottomBlankSpaceViewController.h */, + C0F1193919EEDCD500708D17 /* BottomBlankSpaceViewController.m */, + C02790321A01404000FCB517 /* CollectionViewDemoController.h */, + C02790331A01404000FCB517 /* CollectionViewDemoController.m */, + DDAA29F01A320057002C0ED8 /* TableViewInContainerViewController.h */, + DDAA29F11A320057002C0ED8 /* TableViewInContainerViewController.m */, + 1C2270101AE69224003A9D15 /* CustomViewController.h */, + 1C2270111AE69224003A9D15 /* CustomViewController.m */, + 1C22700D1AE68EEE003A9D15 /* CustomSubclassView.h */, + 1C22700E1AE68EEE003A9D15 /* CustomSubclassView.m */, + C0A25BD219D72AAA009E074D /* TableViewController Example */, + C06579C119D60AAF00DAA3EA /* Settings */, + C0B63BAE1781FAB1008D3B64 /* AppDelegate.h */, + C0B63BAF1781FAB1008D3B64 /* AppDelegate.m */, + ); + name = "Objective-C"; + sourceTree = ""; + }; + C0E9FD161B7DEEE800C62579 /* Swift */ = { + isa = PBXGroup; + children = ( + C08CE0BC1A5C5EAC00FD9273 /* Swift Pending.rtf */, + C0ACB0F819CF104D0057B571 /* Info.plist */, + C0DD7E9F19D0A0AE007604CF /* KeyboardTextFieldDemoSwift */, + ); + name = Swift; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -820,7 +816,6 @@ B53A8A301A4C2A3900951878 /* iTunesArtwork@2x in Resources */, C05C59411A4C7F110007BD8F /* IQKeyboardManagerScreenshot.png in Resources */, B53A8A331A4C2D7A00951878 /* icon.png in Resources */, - C0ACB10419CF104F0057B571 /* LaunchScreen.xib in Resources */, C0ACB10119CF104E0057B571 /* Images.xcassets in Resources */, C0EC59DE19D0C11200997FFE /* MainSwift.storyboard in Resources */, ); @@ -887,6 +882,7 @@ C0EC59D219D0C0B100997FFE /* TextFieldViewController.swift in Sources */, C056E1F41AE41B0100F09472 /* AppDelegate.swift in Sources */, 1C1ADFC31AE50E28007A73E3 /* CollectionViewDemoController.swift in Sources */, + C0E9FD1C1B7E021000C62579 /* IQUIViewController+Additions.swift in Sources */, C0EC59D619D0C0D200997FFE /* WebViewController.swift in Sources */, C0DDEB6919FCD56300FAB29F /* IQTextView.swift in Sources */, 1C1ADFC91AE51FB5007A73E3 /* ExampleTableViewController.swift in Sources */, @@ -909,6 +905,7 @@ C0DDEB6219FCD56300FAB29F /* IQUIView+Hierarchy.swift in Sources */, C0DDEB6519FCD56300FAB29F /* IQKeyboardManagerConstantsInternal.swift in Sources */, 1C1ADFBF1AE50D9B007A73E3 /* ManualToolbarViewController.swift in Sources */, + C0E9FD191B7E01F400C62579 /* IQUITextFieldView+Additions.swift in Sources */, C0DDEB6119FCD56300FAB29F /* IQNSArray+Sort.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -977,14 +974,6 @@ name = Main.storyboard; sourceTree = ""; }; - C0ACB10219CF104F0057B571 /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - C0ACB10319CF104F0057B571 /* Base */, - ); - name = LaunchScreen.xib; - sourceTree = ""; - }; C0B63BA81781FAB1008D3B64 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -1050,6 +1039,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -1078,6 +1068,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; diff --git a/KeyboardTextFieldDemo/IQKeyboardManager.xcodeproj/project.xcworkspace/xcuserdata/iftekhar.xcuserdatad/UserInterfaceState.xcuserstate b/KeyboardTextFieldDemo/IQKeyboardManager.xcodeproj/project.xcworkspace/xcuserdata/iftekhar.xcuserdatad/UserInterfaceState.xcuserstate index 5012a9be0b7670fe6f2ef94e452906e49ed95bb9..adaa15ee817a3244ee4dc3bc80d70f72ff809ecd 100644 GIT binary patch literal 164724 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 COPt_gogRh^4GSuDRu!Tduj~ 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 Qr~lvo{Qv(wGHc=g0kKO|#{d8T diff --git a/KeyboardTextFieldDemo/KeyboardTextFieldDemo/Base.lproj/Main.storyboard b/KeyboardTextFieldDemo/KeyboardTextFieldDemo/Base.lproj/Main.storyboard index 6ec9631..c793344 100644 --- a/KeyboardTextFieldDemo/KeyboardTextFieldDemo/Base.lproj/Main.storyboard +++ b/KeyboardTextFieldDemo/KeyboardTextFieldDemo/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -533,7 +533,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -562,7 +562,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -591,7 +591,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -620,7 +620,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -649,7 +649,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -678,7 +678,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -707,7 +707,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -736,7 +736,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -765,7 +765,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -796,7 +796,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -826,7 +826,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -855,7 +855,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -884,7 +884,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -913,7 +913,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1189,7 +1189,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1206,7 +1206,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1224,7 +1224,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1241,7 +1241,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1259,7 +1259,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1276,7 +1276,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1294,7 +1294,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1311,7 +1311,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1329,7 +1329,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1346,7 +1346,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1364,7 +1364,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1381,7 +1381,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1399,7 +1399,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1416,7 +1416,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1434,7 +1434,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1451,7 +1451,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1573,7 +1573,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - + @@ -1612,7 +1612,7 @@ textField.inputAcessoryView = [[UIView alloc] init]; - +