From 707d4bc6f465c1d5561be8f133db4dc49465dbbb Mon Sep 17 00:00:00 2001 From: Artur Azarau Date: Thu, 10 Jan 2019 10:01:22 +0300 Subject: [PATCH 1/7] Several things were added: - TitleType enum - Large title display mode variable - Function for updating title in view controllers --- LeadKit.xcodeproj/project.pbxproj | 20 +++++++++ Sources/Enums/TitleType.swift | 27 ++++++++++++ .../Alamofire/SessionManager+Extensions.swift | 31 +++++++------- .../UINavigationItem+TitleDisplay.swift | 41 +++++++++++++++++++ ...Controller+UpdateNavigationItemTitle.swift | 34 +++++++++++++++ .../Structures/Api/ApiRequestParameters.swift | 6 +-- .../NetworkServiceConfiguration.swift | 2 +- 7 files changed, 141 insertions(+), 20 deletions(-) create mode 100644 Sources/Enums/TitleType.swift create mode 100644 Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplay.swift create mode 100644 Sources/Extensions/UIKit/UIViewController/UIViewController+UpdateNavigationItemTitle.swift diff --git a/LeadKit.xcodeproj/project.pbxproj b/LeadKit.xcodeproj/project.pbxproj index 0318f475..935a0ef0 100644 --- a/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit.xcodeproj/project.pbxproj @@ -665,6 +665,9 @@ 6B5B6EF1577C8CC06E4CCF1B /* Array+RowExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5B62E7942E5AEE68A95449 /* Array+RowExtensions.swift */; }; 6B5B6F0BFA22832C47142BAD /* TableKitViewModel+Extenstions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5B61443DDAB82927448CAA /* TableKitViewModel+Extenstions.swift */; }; 6B5B6F4E2B4F6F74348AC138 /* TableKitViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5B66503F2C42D009DEA011 /* TableKitViewModel.swift */; }; + 7295473F21E661E6009558E7 /* TitleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295473E21E661E6009558E7 /* TitleType.swift */; }; + 7295474221E6628C009558E7 /* UINavigationItem+TitleDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplay.swift */; }; + 7295474421E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474321E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift */; }; 820CAD8420B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 820CAD8320B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift */; }; 825F8F2820B3384C00594857 /* PaginationWrapperUIDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825F8F2720B3384C00594857 /* PaginationWrapperUIDelegate.swift */; }; 82F8BB181F5DDED100C1061B /* Single+DeferredJust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F8BB171F5DDED100C1061B /* Single+DeferredJust.swift */; }; @@ -981,6 +984,9 @@ 6B5B61443DDAB82927448CAA /* TableKitViewModel+Extenstions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TableKitViewModel+Extenstions.swift"; sourceTree = ""; }; 6B5B62E7942E5AEE68A95449 /* Array+RowExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+RowExtensions.swift"; sourceTree = ""; }; 6B5B66503F2C42D009DEA011 /* TableKitViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableKitViewModel.swift; sourceTree = ""; }; + 7295473E21E661E6009558E7 /* TitleType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleType.swift; sourceTree = ""; }; + 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+TitleDisplay.swift"; sourceTree = ""; }; + 7295474321E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+UpdateNavigationItemTitle.swift"; sourceTree = ""; }; 78405D3B3D3C3E17456877FF /* Pods_LeadKit_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LeadKit_iOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 820CAD8320B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PaginationWrapperDelegate+DefaultImplementation.swift"; sourceTree = ""; }; 825F8F2720B3384C00594857 /* PaginationWrapperUIDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaginationWrapperUIDelegate.swift; sourceTree = ""; }; @@ -1161,6 +1167,7 @@ 671461D81EB3396E00EAB194 /* LeadKitError.swift */, 671461D91EB3396E00EAB194 /* ResizeMode.swift */, 67FDC25E1FA310EA00C76A77 /* RequestError.swift */, + 7295473E21E661E6009558E7 /* TitleType.swift */, ); path = Enums; sourceTree = ""; @@ -1337,6 +1344,7 @@ 671463A61EB340C000EAB194 /* UIViewController+ConfigurableController.swift */, 671462191EB3396E00EAB194 /* UIViewController+DefaultXibName.swift */, 6714621A1EB3396E00EAB194 /* UIViewController+TopVisibleViewController.swift */, + 7295474321E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift */, ); path = UIViewController; sourceTree = ""; @@ -1574,6 +1582,7 @@ 672947E4206EA67B00AC6B6B /* UIImage */, 67E902552125B55E008EDF45 /* UIImageView */, 67274776206CD07B00725163 /* UILabel */, + 7295474021E6623D009558E7 /* UINavigationItem */, 6741CEB820E242CF00FEC4D9 /* UIScrollView */, 36DAAF4F2007CC330090BE0D /* UITableView */, 67E3524C2119ABD00035BDDB /* UITextField */, @@ -2167,6 +2176,14 @@ path = TableKitViewModel; sourceTree = ""; }; + 7295474021E6623D009558E7 /* UINavigationItem */ = { + isa = PBXGroup; + children = ( + 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplay.swift */, + ); + path = UINavigationItem; + sourceTree = ""; + }; 78CFEE201C5C456B00F50370 = { isa = PBXGroup; children = ( @@ -2926,6 +2943,7 @@ 673564F62068C68D00F0CBED /* NumberFormat.swift in Sources */, 67DB776921087154001CB56B /* CollectionViewWrapperView.swift in Sources */, 671462901EB3396E00EAB194 /* CGImage+Crop.swift in Sources */, + 7295473F21E661E6009558E7 /* TitleType.swift in Sources */, 671462FC1EB3396E00EAB194 /* UIView+XibNameProtocol.swift in Sources */, 67EB7FC0206140E600BDD9FB /* TotalCountCursor.swift in Sources */, 36DAAF512007CC920090BE0D /* UITableView+Extensions.swift in Sources */, @@ -2988,6 +3006,8 @@ B84CB06D20B8325D0090DB91 /* SessionManager.swift in Sources */, A658E5501F8CD9350093527A /* Array+SeparatorRowBoxExtensions.swift in Sources */, 673564F12068C2AD00F0CBED /* NumberFormattingService+DefaultImplementation.swift in Sources */, + 7295474221E6628C009558E7 /* UINavigationItem+TitleDisplay.swift in Sources */, + 7295474421E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift in Sources */, 671462EC1EB3396E00EAB194 /* UIImage+Extensions.swift in Sources */, 6713C24120AF189100875921 /* RxNetworkOperationModel.swift in Sources */, 677452AE206274630024EEEF /* PaginationWrapper.swift in Sources */, diff --git a/Sources/Enums/TitleType.swift b/Sources/Enums/TitleType.swift new file mode 100644 index 00000000..6f0a7db7 --- /dev/null +++ b/Sources/Enums/TitleType.swift @@ -0,0 +1,27 @@ +// +// Copyright (c) 2019 Touch Instinct +// +// 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. +// + +enum TitleType { + case large(title: String) + case normal(title: String) + case empty +} diff --git a/Sources/Extensions/Alamofire/SessionManager+Extensions.swift b/Sources/Extensions/Alamofire/SessionManager+Extensions.swift index 94e39703..c392cc6c 100644 --- a/Sources/Extensions/Alamofire/SessionManager+Extensions.swift +++ b/Sources/Extensions/Alamofire/SessionManager+Extensions.swift @@ -29,15 +29,14 @@ import RxAlamofire /// - getMethodForbidden: invalid usage of get method /// - urlEncodingForbidden: invalid usage of URLEncoding enum RequestUsageError: Error { - + case getMethodForbidden case urlEncodingForbidden - + } public extension Reactive where Base: SessionManager { - /// Creates an observable of the `Request`. /// /// - Parameters: @@ -47,36 +46,36 @@ public extension Reactive where Base: SessionManager { /// - encoding: The kind of encoding used to process parameters /// - headers: A dictionary containing all the additional headers /// - Returns: An observable of the `Request` - public func request(_ method: Alamofire.HTTPMethod, - _ url: URLConvertible, - parameters: [Any]? = nil, - encoding: JSONEncoding = .default, - headers: [String: String]? = nil) + func request(_ method: Alamofire.HTTPMethod, + _ url: URLConvertible, + parameters: [Any]? = nil, + encoding: JSONEncoding = .default, + headers: [String: String]? = nil) -> Observable { return Observable.deferred { - + guard method != .get else { assertionFailure("Unable to pass array in get request") throw RequestUsageError.getMethodForbidden } - + let urlRequest = try URLRequest(url: try url.asURL(), method: method, headers: headers) let encodedUrlRequest = try encoding.encode(urlRequest, withJSONObject: parameters) - + return self.request(urlRequest: encodedUrlRequest) } } - + /// Method which executes request with given api parameters /// /// - Parameter requestParameters: api parameters to pass Alamofire /// - Returns: Observable with request func apiRequest(requestParameters: ApiRequestParameters) -> Observable { - + let requestObservable: Observable - + switch requestParameters.parameters { case .dictionary(let parameters)?: requestObservable = request(requestParameters.method, @@ -89,7 +88,7 @@ public extension Reactive where Base: SessionManager { assertionFailure("Invalid encoding type with array parameter") return .error(RequestUsageError.urlEncodingForbidden) } - + requestObservable = request(requestParameters.method, requestParameters.url, parameters: parameters, @@ -102,7 +101,7 @@ public extension Reactive where Base: SessionManager { encoding: requestParameters.encoding, headers: requestParameters.headers) } - + return requestObservable .map { $0.validate(statusCode: self.base.acceptableStatusCodes) } } diff --git a/Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplay.swift b/Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplay.swift new file mode 100644 index 00000000..9d87a54d --- /dev/null +++ b/Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplay.swift @@ -0,0 +1,41 @@ +// +// Copyright (c) 2019 Touch Instinct +// +// 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 UIKit + +public extension UINavigationItem { + var largeTitleDisplayModeIOS11: LargeTitleDisplayMode { + get { + if #available(iOS 11.0, *) { + return largeTitleDisplayMode + } else { + return .never + } + } + + set { + if #available(iOS 11.0, *) { + largeTitleDisplayMode = newValue + } + } + } +} diff --git a/Sources/Extensions/UIKit/UIViewController/UIViewController+UpdateNavigationItemTitle.swift b/Sources/Extensions/UIKit/UIViewController/UIViewController+UpdateNavigationItemTitle.swift new file mode 100644 index 00000000..82bb1a17 --- /dev/null +++ b/Sources/Extensions/UIKit/UIViewController/UIViewController+UpdateNavigationItemTitle.swift @@ -0,0 +1,34 @@ +// +// Copyright (c) 2019 Touch Instinct +// +// 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 UIKit + +extension UIViewController { + func updateNavigationItemTitle(with titleType: TitleType) { + switch titleType { + case let .large(newTitle), let .normal(newTitle): + title = newTitle + case .empty: + title = nil + } + } +} diff --git a/Sources/Structures/Api/ApiRequestParameters.swift b/Sources/Structures/Api/ApiRequestParameters.swift index 411ff4e8..ed841085 100644 --- a/Sources/Structures/Api/ApiRequestParameters.swift +++ b/Sources/Structures/Api/ApiRequestParameters.swift @@ -35,7 +35,7 @@ public struct ApiRequestParameters { case dictionary(Parameters) case array([Any]) } - + let method: HTTPMethod let url: URLConvertible let parameters: RequestParameters? @@ -58,13 +58,13 @@ public struct ApiRequestParameters { self.parameters = nil } } - + public init(url: URLConvertible, method: HTTPMethod = .get, parameters: [Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil) { - + self.method = method self.url = url self.encoding = encoding diff --git a/Sources/Structures/NetworkService/NetworkServiceConfiguration.swift b/Sources/Structures/NetworkService/NetworkServiceConfiguration.swift index 231dd924..0917337e 100644 --- a/Sources/Structures/NetworkService/NetworkServiceConfiguration.swift +++ b/Sources/Structures/NetworkService/NetworkServiceConfiguration.swift @@ -95,7 +95,7 @@ public extension NetworkServiceConfiguration { encoding: requestEncoding ?? encoding, headers: requestHeaders) } - + /// Convenient method to create ApiRequestParameters. /// /// - Parameters: From 35131cc3364940587585604c13d0ce0a017ec98e Mon Sep 17 00:00:00 2001 From: Artur Azarau Date: Thu, 10 Jan 2019 10:04:58 +0300 Subject: [PATCH 2/7] file renamed --- LeadKit.xcodeproj/project.pbxproj | 8 ++++---- ...play.swift => UINavigationItem+TitleDisplayMode.swift} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename Sources/Extensions/UIKit/UINavigationItem/{UINavigationItem+TitleDisplay.swift => UINavigationItem+TitleDisplayMode.swift} (100%) diff --git a/LeadKit.xcodeproj/project.pbxproj b/LeadKit.xcodeproj/project.pbxproj index 935a0ef0..32afc382 100644 --- a/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit.xcodeproj/project.pbxproj @@ -666,7 +666,7 @@ 6B5B6F0BFA22832C47142BAD /* TableKitViewModel+Extenstions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5B61443DDAB82927448CAA /* TableKitViewModel+Extenstions.swift */; }; 6B5B6F4E2B4F6F74348AC138 /* TableKitViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5B66503F2C42D009DEA011 /* TableKitViewModel.swift */; }; 7295473F21E661E6009558E7 /* TitleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295473E21E661E6009558E7 /* TitleType.swift */; }; - 7295474221E6628C009558E7 /* UINavigationItem+TitleDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplay.swift */; }; + 7295474221E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift */; }; 7295474421E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474321E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift */; }; 820CAD8420B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 820CAD8320B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift */; }; 825F8F2820B3384C00594857 /* PaginationWrapperUIDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825F8F2720B3384C00594857 /* PaginationWrapperUIDelegate.swift */; }; @@ -985,7 +985,7 @@ 6B5B62E7942E5AEE68A95449 /* Array+RowExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+RowExtensions.swift"; sourceTree = ""; }; 6B5B66503F2C42D009DEA011 /* TableKitViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableKitViewModel.swift; sourceTree = ""; }; 7295473E21E661E6009558E7 /* TitleType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleType.swift; sourceTree = ""; }; - 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+TitleDisplay.swift"; sourceTree = ""; }; + 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+TitleDisplayMode.swift"; sourceTree = ""; }; 7295474321E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+UpdateNavigationItemTitle.swift"; sourceTree = ""; }; 78405D3B3D3C3E17456877FF /* Pods_LeadKit_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LeadKit_iOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 820CAD8320B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PaginationWrapperDelegate+DefaultImplementation.swift"; sourceTree = ""; }; @@ -2179,7 +2179,7 @@ 7295474021E6623D009558E7 /* UINavigationItem */ = { isa = PBXGroup; children = ( - 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplay.swift */, + 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift */, ); path = UINavigationItem; sourceTree = ""; @@ -3006,7 +3006,7 @@ B84CB06D20B8325D0090DB91 /* SessionManager.swift in Sources */, A658E5501F8CD9350093527A /* Array+SeparatorRowBoxExtensions.swift in Sources */, 673564F12068C2AD00F0CBED /* NumberFormattingService+DefaultImplementation.swift in Sources */, - 7295474221E6628C009558E7 /* UINavigationItem+TitleDisplay.swift in Sources */, + 7295474221E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift in Sources */, 7295474421E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift in Sources */, 671462EC1EB3396E00EAB194 /* UIImage+Extensions.swift in Sources */, 6713C24120AF189100875921 /* RxNetworkOperationModel.swift in Sources */, diff --git a/Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplay.swift b/Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplayMode.swift similarity index 100% rename from Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplay.swift rename to Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplayMode.swift From e3ddab4f198ba49067e228bec2f7e7badd58ee1c Mon Sep 17 00:00:00 2001 From: Artur Azarau Date: Thu, 10 Jan 2019 14:16:45 +0300 Subject: [PATCH 3/7] issues resolved --- LeadKit.xcodeproj/project.pbxproj | 18 ++++++------------ Sources/Enums/TitleType.swift | 7 ++++++- .../UINavigationItem+Support.swift} | 8 +++++--- ...wController+UpdateNavigationItemTitle.swift | 6 +++++- 4 files changed, 22 insertions(+), 17 deletions(-) rename Sources/Extensions/{UIKit/UINavigationItem/UINavigationItem+TitleDisplayMode.swift => Support/UINavigationItem+Support.swift} (87%) diff --git a/LeadKit.xcodeproj/project.pbxproj b/LeadKit.xcodeproj/project.pbxproj index 32afc382..8618dc7c 100644 --- a/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit.xcodeproj/project.pbxproj @@ -666,8 +666,9 @@ 6B5B6F0BFA22832C47142BAD /* TableKitViewModel+Extenstions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5B61443DDAB82927448CAA /* TableKitViewModel+Extenstions.swift */; }; 6B5B6F4E2B4F6F74348AC138 /* TableKitViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5B66503F2C42D009DEA011 /* TableKitViewModel.swift */; }; 7295473F21E661E6009558E7 /* TitleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295473E21E661E6009558E7 /* TitleType.swift */; }; - 7295474221E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift */; }; + 7295474221E6628C009558E7 /* UINavigationItem+Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474121E6628C009558E7 /* UINavigationItem+Support.swift */; }; 7295474421E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474321E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift */; }; + 7295474D21E75E84009558E7 /* UINavigationItem+Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7295474121E6628C009558E7 /* UINavigationItem+Support.swift */; }; 820CAD8420B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 820CAD8320B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift */; }; 825F8F2820B3384C00594857 /* PaginationWrapperUIDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825F8F2720B3384C00594857 /* PaginationWrapperUIDelegate.swift */; }; 82F8BB181F5DDED100C1061B /* Single+DeferredJust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F8BB171F5DDED100C1061B /* Single+DeferredJust.swift */; }; @@ -985,7 +986,7 @@ 6B5B62E7942E5AEE68A95449 /* Array+RowExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+RowExtensions.swift"; sourceTree = ""; }; 6B5B66503F2C42D009DEA011 /* TableKitViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableKitViewModel.swift; sourceTree = ""; }; 7295473E21E661E6009558E7 /* TitleType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleType.swift; sourceTree = ""; }; - 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+TitleDisplayMode.swift"; sourceTree = ""; }; + 7295474121E6628C009558E7 /* UINavigationItem+Support.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+Support.swift"; sourceTree = ""; }; 7295474321E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+UpdateNavigationItemTitle.swift"; sourceTree = ""; }; 78405D3B3D3C3E17456877FF /* Pods_LeadKit_iOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LeadKit_iOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 820CAD8320B43B080033EF94 /* PaginationWrapperDelegate+DefaultImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PaginationWrapperDelegate+DefaultImplementation.swift"; sourceTree = ""; }; @@ -1285,6 +1286,7 @@ 671461FE1EB3396E00EAB194 /* Support */ = { isa = PBXGroup; children = ( + 7295474121E6628C009558E7 /* UINavigationItem+Support.swift */, 671461FF1EB3396E00EAB194 /* UIScrollView+Support.swift */, ); path = Support; @@ -1582,7 +1584,6 @@ 672947E4206EA67B00AC6B6B /* UIImage */, 67E902552125B55E008EDF45 /* UIImageView */, 67274776206CD07B00725163 /* UILabel */, - 7295474021E6623D009558E7 /* UINavigationItem */, 6741CEB820E242CF00FEC4D9 /* UIScrollView */, 36DAAF4F2007CC330090BE0D /* UITableView */, 67E3524C2119ABD00035BDDB /* UITextField */, @@ -2176,14 +2177,6 @@ path = TableKitViewModel; sourceTree = ""; }; - 7295474021E6623D009558E7 /* UINavigationItem */ = { - isa = PBXGroup; - children = ( - 7295474121E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift */, - ); - path = UINavigationItem; - sourceTree = ""; - }; 78CFEE201C5C456B00F50370 = { isa = PBXGroup; children = ( @@ -3006,7 +2999,7 @@ B84CB06D20B8325D0090DB91 /* SessionManager.swift in Sources */, A658E5501F8CD9350093527A /* Array+SeparatorRowBoxExtensions.swift in Sources */, 673564F12068C2AD00F0CBED /* NumberFormattingService+DefaultImplementation.swift in Sources */, - 7295474221E6628C009558E7 /* UINavigationItem+TitleDisplayMode.swift in Sources */, + 7295474221E6628C009558E7 /* UINavigationItem+Support.swift in Sources */, 7295474421E66328009558E7 /* UIViewController+UpdateNavigationItemTitle.swift in Sources */, 671462EC1EB3396E00EAB194 /* UIImage+Extensions.swift in Sources */, 6713C24120AF189100875921 /* RxNetworkOperationModel.swift in Sources */, @@ -3555,6 +3548,7 @@ 67E352532119AC060035BDDB /* UIButton+ViewTextConfigurable.swift in Sources */, 6713C24220AF189100875921 /* RxNetworkOperationModel.swift in Sources */, 671462A11EB3396E00EAB194 /* Double+Rounding.swift in Sources */, + 7295474D21E75E84009558E7 /* UINavigationItem+Support.swift in Sources */, 671463091EB3396E00EAB194 /* UIView+Rotation.swift in Sources */, 67ED2BDF20B44DEB00508B3E /* InitializableView.swift in Sources */, 6714626D1EB3396E00EAB194 /* XibView.swift in Sources */, diff --git a/Sources/Enums/TitleType.swift b/Sources/Enums/TitleType.swift index 6f0a7db7..b2a95229 100644 --- a/Sources/Enums/TitleType.swift +++ b/Sources/Enums/TitleType.swift @@ -20,7 +20,12 @@ // THE SOFTWARE. // -enum TitleType { +/// Title type for UIViewController title. +/// +/// - large: large sized title +/// - normal: normal sized title +/// - empty: empty title +public enum TitleType { case large(title: String) case normal(title: String) case empty diff --git a/Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplayMode.swift b/Sources/Extensions/Support/UINavigationItem+Support.swift similarity index 87% rename from Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplayMode.swift rename to Sources/Extensions/Support/UINavigationItem+Support.swift index 9d87a54d..3f36184b 100644 --- a/Sources/Extensions/UIKit/UINavigationItem/UINavigationItem+TitleDisplayMode.swift +++ b/Sources/Extensions/Support/UINavigationItem+Support.swift @@ -22,11 +22,13 @@ import UIKit -public extension UINavigationItem { - var largeTitleDisplayModeIOS11: LargeTitleDisplayMode { +public extension Support where Base: UINavigationItem { + + /// Large title display mode + var largeTitleDisplayMode: Base.LargeTitleDisplayMode { get { if #available(iOS 11.0, *) { - return largeTitleDisplayMode + return self.largeTitleDisplayMode } else { return .never } diff --git a/Sources/Extensions/UIKit/UIViewController/UIViewController+UpdateNavigationItemTitle.swift b/Sources/Extensions/UIKit/UIViewController/UIViewController+UpdateNavigationItemTitle.swift index 82bb1a17..f702ebe7 100644 --- a/Sources/Extensions/UIKit/UIViewController/UIViewController+UpdateNavigationItemTitle.swift +++ b/Sources/Extensions/UIKit/UIViewController/UIViewController+UpdateNavigationItemTitle.swift @@ -22,7 +22,11 @@ import UIKit -extension UIViewController { +public extension UIViewController { + + /// Updates UIViewController's title + /// + /// - Parameter titleType: UIViewController's title type func updateNavigationItemTitle(with titleType: TitleType) { switch titleType { case let .large(newTitle), let .normal(newTitle): From 26efa9a4d8b4f52762d6f044349b0095f76bdd77 Mon Sep 17 00:00:00 2001 From: Artur Azarau Date: Thu, 10 Jan 2019 14:54:20 +0300 Subject: [PATCH 4/7] issues resolved --- Sources/Extensions/Support/UINavigationItem+Support.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/Extensions/Support/UINavigationItem+Support.swift b/Sources/Extensions/Support/UINavigationItem+Support.swift index 3f36184b..12b7fc1e 100644 --- a/Sources/Extensions/Support/UINavigationItem+Support.swift +++ b/Sources/Extensions/Support/UINavigationItem+Support.swift @@ -28,7 +28,7 @@ public extension Support where Base: UINavigationItem { var largeTitleDisplayMode: Base.LargeTitleDisplayMode { get { if #available(iOS 11.0, *) { - return self.largeTitleDisplayMode + return base.largeTitleDisplayMode } else { return .never } @@ -36,7 +36,7 @@ public extension Support where Base: UINavigationItem { set { if #available(iOS 11.0, *) { - largeTitleDisplayMode = newValue + base.largeTitleDisplayMode = newValue } } } From 2b4259d08e4933f3935b309e2d2f4fbc0f9d1139 Mon Sep 17 00:00:00 2001 From: Artur Azarau Date: Thu, 10 Jan 2019 15:16:15 +0300 Subject: [PATCH 5/7] podspec and changelog were updated --- CHANGELOG.md | 5 +++++ LeadKit.podspec | 2 ++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50f44e39..6e6c08b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ # Changelog +### 0.9.5 +- **Add**: `TitleType` enum, that defines `UIViewController`'s title type. +- **Add**: `UINavigationItem.largeTitleDisplayMode` property, that defines `UINavigationItem`'s large title display mode. +- **Add**: `UIViewController.updateNavigationItemTitle` method, that takes `TitleType` as a parameter and updates `UIViewController`'s title. + ### 0.9.4 - **Add**: initialization of `ApiRequestParameters`, that takes an array as a request parameter. - **Add**: `NetworkServiceConfiguration.apiRequestParameters` method, that creates `ApiRequestParameters` with array request parameter. diff --git a/LeadKit.podspec b/LeadKit.podspec index 5aa0ebbc..bcefe34f 100644 --- a/LeadKit.podspec +++ b/LeadKit.podspec @@ -44,6 +44,7 @@ Pod::Spec.new do |s| "Sources/Extensions/DataLoading/GeneralDataLoading/GeneralDataLoadingController+DefaultImplementation.swift", "Sources/Extensions/DataLoading/PaginationDataLoading/*", "Sources/Extensions/Support/UIScrollView+Support.swift", + "Sources/Extensions/Support/UINavigationItem+Support.swift", "Sources/Extensions/TableKit/**/*.swift", "Sources/Extensions/Array/Array+SeparatorRowBoxExtensions.swift", "Sources/Extensions/Array/Array+RowExtensions.swift", @@ -76,6 +77,7 @@ Pod::Spec.new do |s| "Sources/Extensions/NetworkService/NetworkService+ActivityIndicator-UIApplication.swift", "Sources/Extensions/DataLoading/PaginationDataLoading/*", "Sources/Extensions/Support/UIScrollView+Support.swift", + "Sources/Extensions/Support/UINavigationItem+Support.swift", "Sources/Extensions/TableKit/**/*.swift", "Sources/Extensions/UIKit/UIApplication/UIApplication+OpenUrlSupport.swift", "Sources/Extensions/UIKit/UIApplication/UIApplication+Cellular.swift", From 4402cd963cfbf496bed53f6daefb7ce5824043e2 Mon Sep 17 00:00:00 2001 From: Artur Azarau Date: Thu, 10 Jan 2019 21:47:07 +0300 Subject: [PATCH 6/7] version in podspec was fixed --- LeadKit.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LeadKit.podspec b/LeadKit.podspec index bcefe34f..d213fcff 100644 --- a/LeadKit.podspec +++ b/LeadKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "LeadKit" - s.version = "0.9.4" + s.version = "0.9.5" s.summary = "iOS framework with a bunch of tools for rapid development" s.homepage = "https://github.com/TouchInstinct/LeadKit" s.license = "Apache License, Version 2.0" From 727162f58d61fbb40ac4aff3f9933c3796877a21 Mon Sep 17 00:00:00 2001 From: Artur Azarau Date: Thu, 10 Jan 2019 21:54:31 +0300 Subject: [PATCH 7/7] documentation for large title display mode was fixed --- Sources/Extensions/Support/UINavigationItem+Support.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Extensions/Support/UINavigationItem+Support.swift b/Sources/Extensions/Support/UINavigationItem+Support.swift index 12b7fc1e..bd4f4e82 100644 --- a/Sources/Extensions/Support/UINavigationItem+Support.swift +++ b/Sources/Extensions/Support/UINavigationItem+Support.swift @@ -24,7 +24,7 @@ import UIKit public extension Support where Base: UINavigationItem { - /// Large title display mode + /// The mode to use when displaying the title of the navigation bar. var largeTitleDisplayMode: Base.LargeTitleDisplayMode { get { if #available(iOS 11.0, *) {