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/IQToolbar.m | 288 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 288 insertions(+), 0 deletions(-) diff --git a/screendisplay/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQToolbar.m b/screendisplay/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQToolbar.m new file mode 100644 index 0000000..24dda8b --- /dev/null +++ b/screendisplay/Pods/IQKeyboardManager/IQKeyboardManager/IQToolbar/IQToolbar.m @@ -0,0 +1,288 @@ +// +// IQToolbar.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 "IQToolbar.h" +#import "IQKeyboardManagerConstantsInternal.h" +#import "IQUIView+Hierarchy.h" + +#import <UIKit/UIButton.h> +#import <UIKit/UIAccessibility.h> +#import <UIKit/UIViewController.h> + +@interface IQTitleBarButtonItem (PrivateAccessor) + +@property(nonatomic, strong) UIButton *titleButton; + +@end + +@implementation IQToolbar +@synthesize previousBarButton = _previousBarButton; +@synthesize nextBarButton = _nextBarButton; +@synthesize titleBarButton = _titleBarButton; +@synthesize doneBarButton = _doneBarButton; +@synthesize fixedSpaceBarButton = _fixedSpaceBarButton; + ++(void)initialize +{ + [super initialize]; + + IQToolbar *appearanceProxy = [self appearance]; + + NSArray <NSNumber*> *positions = @[@(UIBarPositionAny),@(UIBarPositionBottom),@(UIBarPositionTop),@(UIBarPositionTopAttached)]; + + for (NSNumber *position in positions) + { + UIToolbarPosition toolbarPosition = [position unsignedIntegerValue]; + + [appearanceProxy setBackgroundImage:nil forToolbarPosition:toolbarPosition barMetrics:UIBarMetricsDefault]; + [appearanceProxy setShadowImage:nil forToolbarPosition:toolbarPosition]; + } +} + +-(void)initialize +{ + [self sizeToFit]; + self.autoresizingMask = UIViewAutoresizingFlexibleWidth;// | UIViewAutoresizingFlexibleHeight; + self.translucent = YES; +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) + { + [self initialize]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + if (self) + { + [self initialize]; + } + return self; +} + +-(void)dealloc +{ + self.items = nil; + _previousBarButton = nil; + _nextBarButton = nil; + _titleBarButton = nil; + _doneBarButton = nil; + _fixedSpaceBarButton = nil; +} + +-(IQBarButtonItem *)previousBarButton +{ + if (_previousBarButton == nil) + { + _previousBarButton = [[IQBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStylePlain target:nil action:nil]; + _previousBarButton.accessibilityLabel = @"Toolbar Previous Button"; + } + + return _previousBarButton; +} + +-(IQBarButtonItem *)nextBarButton +{ + if (_nextBarButton == nil) + { + _nextBarButton = [[IQBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStylePlain target:nil action:nil]; + _nextBarButton.accessibilityLabel = @"Toolbar Next Button"; + } + + return _nextBarButton; +} + +-(IQTitleBarButtonItem *)titleBarButton +{ + if (_titleBarButton == nil) + { + _titleBarButton = [[IQTitleBarButtonItem alloc] initWithTitle:nil]; + _titleBarButton.accessibilityLabel = @"Toolbar Title Button"; + } + + return _titleBarButton; +} + +-(IQBarButtonItem *)doneBarButton +{ + if (_doneBarButton == nil) + { + _doneBarButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil]; + _doneBarButton.accessibilityLabel = @"Toolbar Done Button"; + } + + return _doneBarButton; +} + +-(IQBarButtonItem *)fixedSpaceBarButton +{ + if (_fixedSpaceBarButton == nil) + { + _fixedSpaceBarButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; + } + + return _fixedSpaceBarButton; +} + +-(CGSize)sizeThatFits:(CGSize)size +{ + CGSize sizeThatFit = [super sizeThatFits:size]; + + sizeThatFit.height = 44; + + return sizeThatFit; +} + +-(void)setBarStyle:(UIBarStyle)barStyle +{ + [super setBarStyle:barStyle]; + + if (self.titleBarButton.selectableTitleColor == nil) + { + if (barStyle == UIBarStyleDefault) + { + [self.titleBarButton.titleButton setTitleColor:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0] forState:UIControlStateNormal]; + } + else + { + [self.titleBarButton.titleButton setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal]; + } + } +} + +-(void)setTintColor:(UIColor *)tintColor +{ + [super setTintColor:tintColor]; + + for (UIBarButtonItem *item in self.items) + { + [item setTintColor:tintColor]; + } +} + +-(void)layoutSubviews +{ + [super layoutSubviews]; + + //If running on Xcode9 (iOS11) only then we'll validate for iOS version, otherwise for older versions of Xcode (iOS10 and below) we'll just execute the tweak +#ifdef __IPHONE_11_0 + if (@available(iOS 11.0, *)) {} + else +#endif + { + CGRect leftRect = CGRectNull; + CGRect rightRect = CGRectNull; + + BOOL isTitleBarButtonFound = NO; + + NSArray *subviews = [self.subviews sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { + + CGFloat x1 = CGRectGetMinX(view1.frame); + CGFloat y1 = CGRectGetMinY(view1.frame); + CGFloat x2 = CGRectGetMinX(view2.frame); + CGFloat y2 = CGRectGetMinY(view2.frame); + + if (x1 < x2) return NSOrderedAscending; + + else if (x1 > x2) return NSOrderedDescending; + + //Else both y are same so checking for x positions + else if (y1 < y2) return NSOrderedAscending; + + else if (y1 > y2) return NSOrderedDescending; + + else return NSOrderedSame; + }]; + + for (UIView *barButtonItemView in subviews) + { + if (isTitleBarButtonFound == YES) + { + rightRect = barButtonItemView.frame; + break; + } + else if (barButtonItemView == self.titleBarButton.customView) + { + isTitleBarButtonFound = YES; + } + //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem) + else if ([barButtonItemView isKindOfClass:[UIControl class]]) + { + leftRect = barButtonItemView.frame; + } + } + + CGFloat titleMargin = 16; + + CGFloat maxWidth = CGRectGetWidth(self.frame) - titleMargin*2 - (CGRectIsNull(leftRect)?0:CGRectGetMaxX(leftRect)) - (CGRectIsNull(rightRect)?0:CGRectGetWidth(self.frame)-CGRectGetMinX(rightRect)); + CGFloat maxHeight = self.frame.size.height; + + CGSize sizeThatFits = [self.titleBarButton.customView sizeThatFits:CGSizeMake(maxWidth, maxHeight)]; + + CGRect titleRect = CGRectZero; + + CGFloat x = titleMargin; + + if (sizeThatFits.width > 0 && sizeThatFits.height > 0) + { + CGFloat width = MIN(sizeThatFits.width, maxWidth); + CGFloat height = MIN(sizeThatFits.height, maxHeight); + + if (CGRectIsNull(leftRect) == false) + { + x = titleMargin + CGRectGetMaxX(leftRect) + ((maxWidth - width)/2); + } + + CGFloat y = (maxHeight - height)/2; + + titleRect = CGRectMake(x, y, width, height); + } + else + { + if (CGRectIsNull(leftRect) == false) + { + x = titleMargin + CGRectGetMaxX(leftRect); + } + + CGFloat width = CGRectGetWidth(self.frame) - titleMargin*2 - (CGRectIsNull(leftRect)?0:CGRectGetMaxX(leftRect)) - (CGRectIsNull(rightRect)?0:CGRectGetWidth(self.frame)-CGRectGetMinX(rightRect)); + + titleRect = CGRectMake(x, 0, width, maxHeight); + } + + self.titleBarButton.customView.frame = titleRect; + } +} + +#pragma mark - UIInputViewAudioFeedback delegate +- (BOOL) enableInputClicksWhenVisible +{ + return YES; +} + +@end -- Gitblit v1.8.0