forked from Wolox/wolmo-core-ios
-
Notifications
You must be signed in to change notification settings - Fork 0
/
UIViewController.swift
152 lines (129 loc) · 5.82 KB
/
UIViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//
// UIViewController.swift
// WolmoCore
//
// Created by Guido Marucci Blas on 5/7/16.
// Copyright © 2016 Wolox. All rights reserved.
//
import UIKit
public extension UIViewController {
/**
Loads the childViewController into the specified containerView.
It can be done after self's view is initialized, as it uses constraints to determine the childViewController size.
Take into account that self will retain the childViewController, so if for any other reason the childViewController is retained in another place, this would
lead to a memory leak. In that case, one should call unloadViewController().
- parameter childViewController: The controller to load.
- parameter into: The containerView into which the controller will be loaded.
- parameter viewPositioning: Back or Front. Default: Front
*/
public func load(childViewController: UIViewController,
into containerView: UIView,
with insets: UIEdgeInsets = .zero,
in viewPositioning: ViewPositioning = .front,
layout: LayoutMode = .constraints,
respectSafeArea: Bool = false) {
childViewController.willMove(toParent: self)
addChild(childViewController)
childViewController.didMove(toParent: self)
childViewController.view.add(into: containerView, with: insets, in: viewPositioning, layout: layout, respectSafeArea: respectSafeArea)
}
/**
Unloads a childViewController and its view from its parentViewController.
*/
public func unloadFromParentViewController() {
view.removeFromSuperview()
removeFromParent()
}
/**
Unloads all childViewController and their view from self.
*/
public func unloadChildViewControllers() {
for childController in self.children {
childController.unloadFromParentViewController()
}
}
}
// MARK: - Navigation Bar
public extension UIViewController {
/**
Configures the navigation bar to have a particular image as back button.
- parameter image: The image of the back button.
- warning: This function must be called when self is inside a navigation controller.
If not it will arise a runtime fatal error.
*/
public func setNavigationBarBackButton(_ image: UIImage) {
guard let navigationController = navigationController else { fatalError("There is no navigation controller.") }
navigationController.navigationBar.topItem?.title = ""
navigationController.navigationBar.backIndicatorImage = image
navigationController.navigationBar.backIndicatorTransitionMaskImage = image
}
/**
Configures the navigation bar color.
- parameter color: The new color of the navigation bar.
This represents the navigation bar background color.
- warning: This function must be called when self is inside a navigation controller.
If not it will arise a runtime fatal error.
*/
public func setNavigationBarColor(_ color: UIColor) {
guard let navigationController = navigationController else { fatalError("There is no navigation controller.") }
navigationController.navigationBar.barTintColor = color
}
/**
Configures the navigation bar tint color.
- parameter color: The new tint color of the navigation bar.
This represents the color of the left and right button items.
- warning: This function must be called when self is inside a navigation controller.
If not it will arise a runtime fatal error.
*/
public func setNavigationBarTintColor(_ color: UIColor) {
guard let navigationController = navigationController else { fatalError("There is no navigation controller.") }
navigationController.navigationBar.tintColor = color
}
/**
Configures the navigation bar style.
- parameter style: The new style of the navigation bar.
- warning: This function must be called when self is inside a navigation controller.
If not it will arise a runtime fatal error.
*/
public func setNavigationBarStyle(_ style: UIBarStyle) {
guard let navigationController = navigationController else { fatalError("There is no navigation controller.") }
navigationController.navigationBar.barStyle = style
}
/**
Sets a collection of buttons as the navigation bar left buttons.
- parameter buttons: the Array of buttons to use.
*/
public func setNavigationLeftButtons(_ buttons: [UIBarButtonItem]) {
navigationItem.leftBarButtonItems = buttons
}
/**
Sets a collection of buttons as the navigation bar right buttons.
- parameter buttons: the Array of buttons to use.
*/
public func setNavigationRightButtons(_ buttons: [UIBarButtonItem]) {
navigationItem.rightBarButtonItems = buttons
}
/**
Adds and configures a label to use as title of the navigation bar.
- parameter title: the string of the label.
- parameter font: the font to use for the label.
- parameter color: the color of the text.
*/
public func setNavigationBarTitle(_ title: String, font: UIFont, color: UIColor) {
let label = UILabel(frame: .zero)
label.backgroundColor = .clear
label.font = font
label.textColor = color
label.adjustsFontSizeToFitWidth = true
label.text = title
label.sizeToFit()
navigationItem.titleView = label
}
/**
Adds an ImageView with the image passed as the titleView of the navigation bar.
- parameter image: The image to set as title.
*/
public func setNavigationBarTitleImage(_ image: UIImage) {
navigationItem.titleView = UIImageView(image: image)
}
}