From 3e8437ae559487362fae3525beb79c534c213a51 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 12 Jul 2018 13:44:34 +0800
Subject: [PATCH] bug修复和功能优化

---
 screendisplay/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m | 1068 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,068 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m b/screendisplay/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m
new file mode 100644
index 0000000..05108d3
--- /dev/null
+++ b/screendisplay/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m
@@ -0,0 +1,1068 @@
+//
+// IQUIView+IQKeyboardToolbar.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 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 "IQUIView+IQKeyboardToolbar.h"
+#import "IQKeyboardManagerConstantsInternal.h"
+#import "IQKeyboardManager.h"
+
+#import <objc/runtime.h>
+
+#import <UIKit/UIImage.h>
+#import <UIKit/UILabel.h>
+#import <UIKit/UIAccessibility.h>
+
+/*UIKeyboardToolbar Category implementation*/
+@implementation UIView (IQToolbarAddition)
+
+-(IQToolbar *)keyboardToolbar
+{
+    IQToolbar *keyboardToolbar = nil;
+    if ([[self inputAccessoryView] isKindOfClass:[IQToolbar class]])
+    {
+        keyboardToolbar = [self inputAccessoryView];
+    }
+    else
+    {
+        keyboardToolbar = objc_getAssociatedObject(self, @selector(keyboardToolbar));
+        
+        if (keyboardToolbar == nil)
+        {
+            keyboardToolbar = [[IQToolbar alloc] init];
+            
+            objc_setAssociatedObject(self, @selector(keyboardToolbar), keyboardToolbar, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+        }
+    }
+    
+    return keyboardToolbar;
+}
+
+-(void)setShouldHideToolbarPlaceholder:(BOOL)shouldHideToolbarPlaceholder
+{
+    objc_setAssociatedObject(self, @selector(shouldHideToolbarPlaceholder), @(shouldHideToolbarPlaceholder), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+
+    self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder;
+}
+
+-(BOOL)shouldHideToolbarPlaceholder
+{
+    NSNumber *shouldHideToolbarPlaceholder = objc_getAssociatedObject(self, @selector(shouldHideToolbarPlaceholder));
+    return [shouldHideToolbarPlaceholder boolValue];
+}
+
+-(void)setShouldHidePlaceholderText:(BOOL)shouldHidePlaceholderText
+{
+    [self setShouldHideToolbarPlaceholder:shouldHidePlaceholderText];
+}
+
+-(BOOL)shouldHidePlaceholderText
+{
+    return [self shouldHideToolbarPlaceholder];
+}
+
+-(void)setToolbarPlaceholder:(NSString *)toolbarPlaceholder
+{
+    objc_setAssociatedObject(self, @selector(toolbarPlaceholder), toolbarPlaceholder, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+
+    self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder;
+}
+
+-(NSString *)toolbarPlaceholder
+{
+    NSString *toolbarPlaceholder = objc_getAssociatedObject(self, @selector(toolbarPlaceholder));
+    return toolbarPlaceholder;
+}
+
+-(void)setPlaceholderText:(NSString*)placeholderText
+{
+    [self setToolbarPlaceholder:placeholderText];
+}
+
+-(NSString*)placeholderText
+{
+    return [self toolbarPlaceholder];
+}
+
+-(NSString *)drawingToolbarPlaceholder
+{
+    if (self.shouldHideToolbarPlaceholder)
+    {
+        return nil;
+    }
+    else if (self.toolbarPlaceholder.length != 0)
+    {
+        return self.toolbarPlaceholder;
+    }
+    else if ([self respondsToSelector:@selector(placeholder)])
+    {
+        return [(UITextField*)self placeholder];
+    }
+    else
+    {
+        return nil;
+    }
+}
+
+-(NSString*)drawingPlaceholderText
+{
+    return [self drawingToolbarPlaceholder];
+}
+
+#pragma mark - Private helper
+
++(IQBarButtonItem*)flexibleBarButtonItem
+{
+    static IQBarButtonItem *nilButton = nil;
+    
+    if (nilButton == nil)
+    {
+        nilButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
+    }
+    
+    return nilButton;
+}
+
+#pragma mark - Toolbar on UIKeyboard
+
+- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action titleText:(NSString*)titleText
+{
+    //  If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+    
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+    
+    NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+
+    //Title button
+    toolbar.titleBarButton.title = self.shouldHideToolbarPlaceholder?nil:titleText;
+#ifdef __IPHONE_11_0
+    if (@available(iOS 11.0, *)) {}
+    else
+#endif
+    {
+        toolbar.titleBarButton.customView.frame = CGRectZero;
+    }
+    [items addObject:toolbar.titleBarButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Right button
+    IQBarButtonItem *doneButton = toolbar.doneBarButton;
+    if (doneButton.isSystemItem == NO)
+    {
+        doneButton.title = nil;
+        doneButton.image = image;
+        doneButton.target = target;
+        doneButton.action = action;
+    }
+    else
+    {
+        doneButton = [[IQBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:target action:action];
+        doneButton.invocation = toolbar.doneBarButton.invocation;
+        doneButton.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel;
+        toolbar.doneBarButton = doneButton;
+    }
+    
+    [items addObject:doneButton];
+    
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+    
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+}
+
+- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    NSString *title = nil;
+    
+    if (shouldShowPlaceholder)
+        title = [self drawingToolbarPlaceholder];
+    
+    [self addRightButtonOnKeyboardWithImage:image target:target action:action titleText:title];
+}
+
+- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action titleText:(NSString*)titleText
+{
+    //  If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+    
+	NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+
+    //Title button
+    toolbar.titleBarButton.title = self.shouldHideToolbarPlaceholder?nil:titleText;
+#ifdef __IPHONE_11_0
+    if (@available(iOS 11.0, *)) {}
+    else
+#endif
+    {
+        toolbar.titleBarButton.customView.frame = CGRectZero;
+    }
+    [items addObject:toolbar.titleBarButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Right button
+    IQBarButtonItem *doneButton = toolbar.doneBarButton;
+    if (doneButton.isSystemItem == NO)
+    {
+        doneButton.title = text;
+        doneButton.image = nil;
+        doneButton.target = target;
+        doneButton.action = action;
+    }
+    else
+    {
+        doneButton =[[IQBarButtonItem alloc] initWithTitle:text style:UIBarButtonItemStyleDone target:target action:action];
+        doneButton.invocation = toolbar.doneBarButton.invocation;
+        doneButton.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel;
+        toolbar.doneBarButton = doneButton;
+    }
+
+    [items addObject:doneButton];
+    
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+    
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+}
+
+- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    NSString *title = nil;
+    
+    if (shouldShowPlaceholder)
+        title = [self drawingToolbarPlaceholder];
+    
+    [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:title];
+}
+
+- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action
+{
+    [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:nil];
+}
+
+
+- (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action titleText:(NSString*)titleText
+{
+    //  If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+ 	
+	NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+
+    //Title button
+    toolbar.titleBarButton.title = self.shouldHideToolbarPlaceholder?nil:titleText;
+#ifdef __IPHONE_11_0
+    if (@available(iOS 11.0, *)) {}
+    else
+#endif
+    {
+        toolbar.titleBarButton.customView.frame = CGRectZero;
+    }
+    [items addObject:toolbar.titleBarButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Done button
+    IQBarButtonItem *doneButton = toolbar.doneBarButton;
+    if (doneButton.isSystemItem == NO)
+    {
+        doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:action];
+        doneButton.invocation = toolbar.doneBarButton.invocation;
+        doneButton.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel;
+        toolbar.doneBarButton = doneButton;
+    }
+    else
+    {
+        doneButton.target = target;
+        doneButton.action = action;
+    }
+    
+    [items addObject:doneButton];
+    
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+    
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+}
+
+-(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    NSString *title = nil;
+    
+    if (shouldShowPlaceholder)
+        title = [self drawingToolbarPlaceholder];
+    
+    [self addDoneOnKeyboardWithTarget:target action:action titleText:title];
+}
+
+-(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action
+{
+    [self addDoneOnKeyboardWithTarget:target action:action titleText:nil];
+}
+
+- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction titleText:(NSString*)titleText
+{
+    //  If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+    
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+    
+    NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+    
+    //Left button
+    IQBarButtonItem *cancelButton = toolbar.previousBarButton;
+    if (cancelButton.isSystemItem == NO)
+    {
+        cancelButton.title = leftTitle;
+        cancelButton.image = nil;
+        cancelButton.target = target;
+        cancelButton.action = leftAction;
+    }
+    else
+    {
+        cancelButton = [[IQBarButtonItem alloc] initWithTitle:leftTitle style:UIBarButtonItemStylePlain target:target action:leftAction];
+        cancelButton.invocation = toolbar.previousBarButton.invocation;
+        cancelButton.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel;
+        toolbar.previousBarButton = cancelButton;
+    }
+
+    [items addObject:cancelButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Title button
+    toolbar.titleBarButton.title = self.shouldHideToolbarPlaceholder?nil:titleText;
+#ifdef __IPHONE_11_0
+    if (@available(iOS 11.0, *)) {}
+    else
+#endif
+    {
+        toolbar.titleBarButton.customView.frame = CGRectZero;
+    }
+    [items addObject:toolbar.titleBarButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Right button
+    IQBarButtonItem *doneButton = toolbar.doneBarButton;
+    if (doneButton.isSystemItem == NO)
+    {
+        doneButton.title = rightTitle;
+        doneButton.image = nil;
+        doneButton.target = target;
+        doneButton.action = rightAction;
+    }
+    else
+    {
+        doneButton =[[IQBarButtonItem alloc] initWithTitle:rightTitle style:UIBarButtonItemStyleDone target:target action:rightAction];
+        doneButton.invocation = toolbar.doneBarButton.invocation;
+        doneButton.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel;
+        toolbar.doneBarButton = doneButton;
+    }
+
+    [items addObject:doneButton];
+    
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+    
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+}
+
+- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    NSString *title = nil;
+    
+    if (shouldShowPlaceholder)
+        title = [self drawingToolbarPlaceholder];
+    
+    [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:title];
+}
+
+- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction
+{
+    [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:nil];
+}
+
+- (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction titleText:(NSString*)titleText
+{
+    //  If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+    
+    NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+    
+    //Cancel button
+    IQBarButtonItem *cancelButton = toolbar.previousBarButton;
+    if (cancelButton.isSystemItem == NO)
+    {
+        cancelButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:target action:cancelAction];
+        cancelButton.invocation = toolbar.previousBarButton.invocation;
+        cancelButton.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel;
+        toolbar.previousBarButton = cancelButton;
+    }
+    else
+    {
+        cancelButton.target = target;
+        cancelButton.action = cancelAction;
+    }
+
+    [items addObject:cancelButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Title button
+    toolbar.titleBarButton.title = self.shouldHideToolbarPlaceholder?nil:titleText;
+#ifdef __IPHONE_11_0
+    if (@available(iOS 11.0, *)) {}
+    else
+#endif
+    {
+        toolbar.titleBarButton.customView.frame = CGRectZero;
+    }
+    [items addObject:toolbar.titleBarButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Done button
+    IQBarButtonItem *doneButton = toolbar.doneBarButton;
+    if (doneButton.isSystemItem == NO)
+    {
+        doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:doneAction];
+        doneButton.invocation = toolbar.doneBarButton.invocation;
+        doneButton.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel;
+        toolbar.doneBarButton = doneButton;
+    }
+    else
+    {
+        doneButton.target = target;
+        doneButton.action = doneAction;
+    }
+
+    [items addObject:doneButton];
+    
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+    
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+}
+
+-(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    NSString *title = nil;
+    
+    if (shouldShowPlaceholder)
+        title = [self drawingToolbarPlaceholder];
+    
+    [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:title];
+}
+
+-(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction
+{
+    [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:nil];
+}
+
+- (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction titleText:(NSString*)titleText
+{
+    //If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for phoneNumber keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+ 
+	NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+	
+    // Get the top level "bundle" which may actually be the framework
+    NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]];
+    
+    // Check to see if the resource bundle exists inside the top level bundle
+    NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]];
+    
+    if (resourcesBundle == nil) {
+        resourcesBundle = mainBundle;
+    }
+    
+    UIImage *imageLeftArrow = nil;
+    UIImage *imageRightArrow = nil;
+    
+#ifdef __IPHONE_11_0
+    if (@available(iOS 10.0, *))
+#else
+    if (IQ_IS_IOS10_OR_GREATER)
+#endif
+    {
+        imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+        imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+    }
+    else
+    {
+        imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+        imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+    }
+
+    //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+#ifdef __IPHONE_11_0
+    if (@available(iOS 9.0, *)) {
+#endif
+        if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)])
+        {
+            imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection];
+            imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection];
+        }
+#ifdef __IPHONE_11_0
+    }
+#endif
+    
+    //Previous button
+    IQBarButtonItem *prev = toolbar.previousBarButton;
+    if (prev.isSystemItem == NO)
+    {
+        prev.title = nil;
+        prev.image = imageLeftArrow;
+        prev.target = target;
+        prev.action = previousAction;
+    }
+    else
+    {
+        prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction];
+        prev.invocation = toolbar.previousBarButton.invocation;
+        prev.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel;
+        toolbar.previousBarButton = prev;
+    }
+    
+    [items addObject:prev];
+
+    //Fixed space
+    IQBarButtonItem *fixed = toolbar.fixedSpaceBarButton;
+    
+#ifdef __IPHONE_11_0
+    if (@available(iOS 10.0, *))
+#else
+    if (IQ_IS_IOS10_OR_GREATER)
+#endif
+    {
+        [fixed setWidth:6];
+    }
+    else
+    {
+        [fixed setWidth:20];
+    }
+    [items addObject:fixed];
+    
+    //Next button
+    IQBarButtonItem *next = toolbar.nextBarButton;
+    if (next.isSystemItem == NO)
+    {
+        next.title = nil;
+        next.image = imageRightArrow;
+        next.target = target;
+        next.action = nextAction;
+    }
+    else
+    {
+        next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction];
+        next.invocation = toolbar.nextBarButton.invocation;
+        next.accessibilityLabel = toolbar.nextBarButton.accessibilityLabel;
+        toolbar.nextBarButton = next;
+    }
+
+    [items addObject:next];
+
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Title button
+    toolbar.titleBarButton.title = self.shouldHideToolbarPlaceholder?nil:titleText;
+#ifdef __IPHONE_11_0
+    if (@available(iOS 11.0, *)) {}
+    else
+#endif
+    {
+        toolbar.titleBarButton.customView.frame = CGRectZero;
+    }
+    [items addObject:toolbar.titleBarButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Done button
+    IQBarButtonItem *doneButton = toolbar.doneBarButton;
+    if (doneButton.isSystemItem == NO)
+    {
+        doneButton =[[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:target action:doneAction];
+        doneButton.invocation = toolbar.doneBarButton.invocation;
+        doneButton.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel;
+        toolbar.doneBarButton = doneButton;
+    }
+    else
+    {
+        doneButton.target = target;
+        doneButton.action = doneAction;
+    }
+
+    [items addObject:doneButton];
+	
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+	
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+}
+
+-(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    NSString *title = nil;
+    
+    if (shouldShowPlaceholder)
+        title = [self drawingToolbarPlaceholder];
+    
+    [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:title];
+}
+
+-(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction
+{
+    [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:nil];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonImage:(UIImage*)rightButtonImage previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText
+{
+    //If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for phoneNumber keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+    
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+    
+    NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+    
+    // Get the top level "bundle" which may actually be the framework
+    NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]];
+    
+    // Check to see if the resource bundle exists inside the top level bundle
+    NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]];
+    
+    if (resourcesBundle == nil) {
+        resourcesBundle = mainBundle;
+    }
+    
+    UIImage *imageLeftArrow = nil;
+    UIImage *imageRightArrow = nil;
+    
+#ifdef __IPHONE_11_0
+    if (@available(iOS 10.0, *))
+#else
+    if (IQ_IS_IOS10_OR_GREATER)
+#endif
+    {
+        imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+        imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+    }
+    else
+    {
+        imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+        imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+    }
+    
+    //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+#ifdef __IPHONE_11_0
+    if (@available(iOS 9.0, *)) {
+#endif
+        if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)])
+        {
+            imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection];
+            imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection];
+        }
+#ifdef __IPHONE_11_0
+    }
+#endif
+
+    //Previous button
+    IQBarButtonItem *prev = toolbar.previousBarButton;
+    if (prev.isSystemItem == NO)
+    {
+        prev.title = nil;
+        prev.image = imageLeftArrow;
+        prev.target = target;
+        prev.action = previousAction;
+    }
+    else
+    {
+        prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction];
+        prev.invocation = toolbar.previousBarButton.invocation;
+        prev.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel;
+        toolbar.previousBarButton = prev;
+    }
+
+    [items addObject:prev];
+    
+    //Fixed space
+    IQBarButtonItem *fixed = toolbar.fixedSpaceBarButton;
+    
+#ifdef __IPHONE_11_0
+    if (@available(iOS 10.0, *))
+#else
+    if (IQ_IS_IOS10_OR_GREATER)
+#endif
+    {
+        [fixed setWidth:6];
+    }
+    else
+    {
+        [fixed setWidth:20];
+    }
+    [items addObject:fixed];
+    
+    //Next button
+    IQBarButtonItem *next = toolbar.nextBarButton;
+    if (next.isSystemItem == NO)
+    {
+        next.title = nil;
+        next.image = imageRightArrow;
+        next.target = target;
+        next.action = nextAction;
+    }
+    else
+    {
+        next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction];
+        next.invocation = toolbar.nextBarButton.invocation;
+        next.accessibilityLabel = toolbar.nextBarButton.accessibilityLabel;
+        toolbar.nextBarButton = next;
+    }
+
+    [items addObject:next];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Title button
+    toolbar.titleBarButton.title = self.shouldHideToolbarPlaceholder?nil:titleText;
+#ifdef __IPHONE_11_0
+    if (@available(iOS 11.0, *)) {}
+    else
+#endif
+    {
+        toolbar.titleBarButton.customView.frame = CGRectZero;
+    }
+    [items addObject:toolbar.titleBarButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Right button
+    IQBarButtonItem *doneButton = toolbar.doneBarButton;
+    if (doneButton.isSystemItem == NO)
+    {
+        doneButton.title = nil;
+        doneButton.image = rightButtonImage;
+        doneButton.target = target;
+        doneButton.action = rightButtonAction;
+    }
+    else
+    {
+        doneButton = [[IQBarButtonItem alloc] initWithImage:rightButtonImage style:UIBarButtonItemStyleDone target:target action:rightButtonAction];
+        doneButton.invocation = toolbar.doneBarButton.invocation;
+        doneButton.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel;
+        toolbar.doneBarButton = doneButton;
+    }
+
+    [items addObject:doneButton];
+    
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+    
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    NSString *title = nil;
+    
+    if (shouldShowPlaceholder)
+        title = [self drawingToolbarPlaceholder];
+    
+    [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonImage:rightButtonImage previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:title];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText
+{
+    //If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for phoneNumber keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceAlert: toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+    
+    NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+    
+    // Get the top level "bundle" which may actually be the framework
+    NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]];
+    
+    // Check to see if the resource bundle exists inside the top level bundle
+    NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]];
+    
+    if (resourcesBundle == nil) {
+        resourcesBundle = mainBundle;
+    }
+    
+    UIImage *imageLeftArrow = nil;
+    UIImage *imageRightArrow = nil;
+    
+#ifdef __IPHONE_11_0
+    if (@available(iOS 10.0, *))
+#else
+    if (IQ_IS_IOS10_OR_GREATER)
+#endif
+    {
+        imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+        imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+    }
+    else
+    {
+        imageLeftArrow = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+        imageRightArrow = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil];
+    }
+    
+    //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+#ifdef __IPHONE_11_0
+    if (@available(iOS 9.0, *)) {
+#endif
+        if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)])
+        {
+            imageLeftArrow = [imageLeftArrow imageFlippedForRightToLeftLayoutDirection];
+            imageRightArrow = [imageRightArrow imageFlippedForRightToLeftLayoutDirection];
+        }
+#ifdef __IPHONE_11_0
+    }
+#endif
+    
+    //Previous button
+    IQBarButtonItem *prev = toolbar.previousBarButton;
+    if (prev.isSystemItem == NO)
+    {
+        prev.title = nil;
+        prev.image = imageLeftArrow;
+        prev.target = target;
+        prev.action = previousAction;
+    }
+    else
+    {
+        prev = [[IQBarButtonItem alloc] initWithImage:imageLeftArrow style:UIBarButtonItemStylePlain target:target action:previousAction];
+        prev.invocation = toolbar.previousBarButton.invocation;
+        prev.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel;
+        toolbar.previousBarButton = prev;
+    }
+    [items addObject:prev];
+    
+    //Fixed space
+    IQBarButtonItem *fixed = toolbar.fixedSpaceBarButton;
+            
+#ifdef __IPHONE_11_0
+    if (@available(iOS 10.0, *))
+#else
+    if (IQ_IS_IOS10_OR_GREATER)
+#endif
+    {
+        [fixed setWidth:6];
+    }
+    else
+    {
+        [fixed setWidth:20];
+    }
+    [items addObject:fixed];
+    
+    //Next button
+    IQBarButtonItem *next = toolbar.nextBarButton;
+    if (next.isSystemItem == NO)
+    {
+        next.title = nil;
+        next.image = imageRightArrow;
+        next.target = target;
+        next.action = nextAction;
+    }
+    else
+    {
+        next = [[IQBarButtonItem alloc] initWithImage:imageRightArrow style:UIBarButtonItemStylePlain target:target action:nextAction];
+        next.invocation = toolbar.nextBarButton.invocation;
+        next.accessibilityLabel = toolbar.nextBarButton.accessibilityLabel;
+        toolbar.nextBarButton = next;
+    }
+    [items addObject:next];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Title button
+    toolbar.titleBarButton.title = self.shouldHideToolbarPlaceholder?nil:titleText;
+#ifdef __IPHONE_11_0
+    if (@available(iOS 11.0, *)) {}
+    else
+#endif
+    {
+        toolbar.titleBarButton.customView.frame = CGRectZero;
+    }
+    [items addObject:toolbar.titleBarButton];
+    
+    //Flexible space
+    [items addObject:[[self class] flexibleBarButtonItem]];
+    
+    //Right button
+    IQBarButtonItem *doneButton = toolbar.doneBarButton;
+    if (doneButton.isSystemItem == NO)
+    {
+        doneButton.title = rightButtonTitle;
+        doneButton.image = nil;
+        doneButton.target = target;
+        doneButton.action = rightButtonAction;
+    }
+    else
+    {
+        doneButton =[[IQBarButtonItem alloc] initWithTitle:rightButtonTitle style:UIBarButtonItemStyleDone target:target action:rightButtonAction];
+        doneButton.invocation = toolbar.doneBarButton.invocation;
+        doneButton.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel;
+        toolbar.doneBarButton = doneButton;
+    }
+
+    [items addObject:doneButton];
+    
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+    
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    NSString *title = nil;
+    
+    if (shouldShowPlaceholder)
+        title = [self drawingToolbarPlaceholder];
+    
+    [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:title];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction
+{
+    [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:nil];
+}
+
+@end

--
Gitblit v1.8.0