Skip to content
This repository was archived by the owner on Jun 17, 2018. It is now read-only.

Commit 5f0d914

Browse files
authored
Merge pull request #298 from kitasuke/change_delegate_to_closure
Change delegate to closure
2 parents c84e892 + 4e92123 commit 5f0d914

File tree

5 files changed

+92
-93
lines changed

5 files changed

+92
-93
lines changed

Example/PagingMenuControllerDemo/PagingMenuViewController.swift

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,22 @@ class PagingMenuViewController: UIViewController {
1717
// Do any additional setup after loading the view, typically from a nib.
1818

1919
let pagingMenuController = self.childViewControllers.first as! PagingMenuController
20-
pagingMenuController.delegate = self
2120
pagingMenuController.setup(options)
22-
}
23-
}
24-
25-
extension PagingMenuViewController: PagingMenuControllerDelegate {
26-
// MARK: - PagingMenuControllerDelegate
27-
func willMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController) {
28-
print(#function)
29-
print(previousMenuController)
30-
print(menuController)
31-
}
32-
33-
func didMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController) {
34-
print(#function)
35-
print(previousMenuController)
36-
print(menuController)
37-
}
38-
39-
func willMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView) {
40-
print(#function)
41-
print(previousMenuItemView)
42-
print(menuItemView)
43-
}
44-
45-
func didMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView) {
46-
print(#function)
47-
print(previousMenuItemView)
48-
print(menuItemView)
21+
pagingMenuController.onMove = { state in
22+
switch state {
23+
case let .willMoveController(menuController, previousMenuController):
24+
print(previousMenuController)
25+
print(menuController)
26+
case let .didMoveController(menuController, previousMenuController):
27+
print(previousMenuController)
28+
print(menuController)
29+
case let .willMoveItem(menuItemView, previousMenuItemView):
30+
print(previousMenuItemView)
31+
print(menuItemView)
32+
case let .didMoveItem(menuItemView, previousMenuItemView):
33+
print(previousMenuItemView)
34+
print(menuItemView)
35+
}
36+
}
4937
}
5038
}

Example/PagingMenuControllerDemo2/RootViewControoler.swift

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -49,39 +49,27 @@ class RootViewControoler: UIViewController {
4949

5050
let options = PagingMenuOptions()
5151
let pagingMenuController = PagingMenuController(options: options)
52-
pagingMenuController.delegate = self
5352
pagingMenuController.view.frame.origin.y += 64
5453
pagingMenuController.view.frame.size.height -= 64
54+
pagingMenuController.onMove = { state in
55+
switch state {
56+
case let .willMoveController(menuController, previousMenuController):
57+
print(previousMenuController)
58+
print(menuController)
59+
case let .didMoveController(menuController, previousMenuController):
60+
print(previousMenuController)
61+
print(menuController)
62+
case let .willMoveItem(menuItemView, previousMenuItemView):
63+
print(previousMenuItemView)
64+
print(menuItemView)
65+
case let .didMoveItem(menuItemView, previousMenuItemView):
66+
print(previousMenuItemView)
67+
print(menuItemView)
68+
}
69+
}
5570

5671
addChildViewController(pagingMenuController)
5772
view.addSubview(pagingMenuController.view)
5873
pagingMenuController.didMove(toParentViewController: self)
5974
}
6075
}
61-
62-
extension RootViewControoler: PagingMenuControllerDelegate {
63-
// MARK: - PagingMenuControllerDelegate
64-
func willMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController) {
65-
print(#function)
66-
print(previousMenuController)
67-
print(menuController)
68-
}
69-
70-
func didMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController) {
71-
print(#function)
72-
print(previousMenuController)
73-
print(menuController)
74-
}
75-
76-
func willMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView) {
77-
print(#function)
78-
print(previousMenuItemView)
79-
print(menuItemView)
80-
}
81-
82-
func didMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView) {
83-
print(#function)
84-
print(previousMenuItemView)
85-
print(menuItemView)
86-
}
87-
}

Pod/Classes/MenuView.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import UIKit
1111
open class MenuView: UIScrollView {
1212
public fileprivate(set) var currentMenuItemView: MenuItemView!
1313

14-
weak internal var viewDelegate: PagingMenuControllerDelegate?
1514
internal fileprivate(set) var menuItemViews = [MenuItemView]()
15+
internal var onMove: ((MenuMoveState) -> Void)?
1616

1717
fileprivate var menuOptions: MenuViewCustomizable!
1818
fileprivate var sortedMenuItemViews = [MenuItemView]()
@@ -115,7 +115,7 @@ open class MenuView: UIScrollView {
115115

116116
if let previousMenuItemView = previousMenuItemView,
117117
page != previousPage {
118-
viewDelegate?.willMove(toMenuItem: menuItemView, fromMenuItem: previousMenuItemView)
118+
onMove?(.willMoveItem(to: menuItemView, from: previousMenuItemView))
119119
}
120120

121121
update(currentPage: page)
@@ -146,7 +146,7 @@ open class MenuView: UIScrollView {
146146

147147
if let previousMenuItemView = previousMenuItemView,
148148
page != previousPage {
149-
self!.viewDelegate?.didMove(toMenuItem: self!.currentMenuItemView, fromMenuItem: previousMenuItemView)
149+
self!.onMove?(.didMoveItem(to: self!.currentMenuItemView, from: previousMenuItemView))
150150
}
151151
}
152152
}

Pod/Classes/PagingMenuController.swift

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,26 @@
88

99
import UIKit
1010

11-
public protocol PagingMenuControllerDelegate: class {
12-
func willMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController)
13-
func didMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController)
14-
func willMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView)
15-
func didMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView)
16-
}
11+
@available(*, deprecated, message: "Please use `onMove` property instead")
12+
public protocol PagingMenuControllerDelegate: class {}
1713

18-
public extension PagingMenuControllerDelegate {
19-
func willMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController) {}
20-
func didMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController) {}
21-
func willMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView) {}
22-
func didMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView) {}
14+
public enum MenuMoveState {
15+
case willMoveController(to: UIViewController, from: UIViewController)
16+
case didMoveController(to: UIViewController, from: UIViewController)
17+
case willMoveItem(to: MenuItemView, from: MenuItemView)
18+
case didMoveItem(to: MenuItemView, from: MenuItemView)
2319
}
2420

2521
internal let MinimumSupportedViewCount = 1
2622
internal let VisiblePagingViewNumber = 3
2723

2824
open class PagingMenuController: UIViewController {
29-
weak public var delegate: PagingMenuControllerDelegate? {
30-
didSet {
31-
guard let menuView = menuView else { return }
32-
33-
menuView.viewDelegate = delegate
34-
}
35-
}
3625
public fileprivate(set) var menuView: MenuView? {
3726
didSet {
3827
guard let menuView = menuView else { return }
3928

4029
menuView.delegate = self
41-
menuView.viewDelegate = delegate
30+
menuView.onMove = onMove
4231
menuView.update(currentPage: options.defaultPage)
4332
view.addSubview(menuView)
4433
}
@@ -53,6 +42,13 @@ open class PagingMenuController: UIViewController {
5342
pagingViewController.didMove(toParentViewController: self)
5443
}
5544
}
45+
public var onMove: ((MenuMoveState) -> Void)? {
46+
didSet {
47+
guard let menuView = menuView else { return }
48+
49+
menuView.onMove = onMove
50+
}
51+
}
5652

5753
fileprivate var options: PagingMenuControllerCustomizable! {
5854
didSet {
@@ -172,7 +168,7 @@ open class PagingMenuController: UIViewController {
172168

173169
let nextPage = page % pagingViewController.controllers.count
174170
let nextPagingViewController = pagingViewController.controllers[nextPage]
175-
delegate?.willMove(toMenu: nextPagingViewController, fromMenu: previousPagingViewController)
171+
onMove?(.willMoveController(to: nextPagingViewController, from: previousPagingViewController))
176172
menuView?.move(toPage: page)
177173

178174
pagingViewController.update(currentPage: nextPage)
@@ -188,7 +184,7 @@ open class PagingMenuController: UIViewController {
188184
// show paging views
189185
self?.showPagingMenuControllers()
190186

191-
self?.delegate?.didMove(toMenu: nextPagingViewController, fromMenu: previousPagingViewController)
187+
self?.onMove?(.didMoveController(to: nextPagingViewController, from: previousPagingViewController))
192188
}
193189
}
194190

README.md

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,23 @@ struct PagingMenuOptions: PagingMenuControllerCustomizable {
213213
}
214214

215215
let pagingMenuController = self.childViewControllers.first as! PagingMenuController
216-
pagingMenuController.delegate = self
217216
pagingMenuController.setup(options)
217+
pagingMenuController.onMove = { state in
218+
switch state {
219+
case let .willMoveController(menuController, previousMenuController):
220+
print(previousMenuController)
221+
print(menuController)
222+
case let .didMoveController(menuController, previousMenuController):
223+
print(previousMenuController)
224+
print(menuController)
225+
case let .willMoveItem(menuItemView, previousMenuItemView):
226+
print(previousMenuItemView)
227+
print(menuItemView)
228+
case let .didMoveItem(menuItemView, previousMenuItemView):
229+
print(previousMenuItemView)
230+
print(menuItemView)
231+
}
232+
}
218233
```
219234
* You should add `ContainerView` into your view controller's view and set `PagingMenuController` as the embedded view controller's class
220235

@@ -247,20 +262,32 @@ pagingMenuController.didMove(toParentViewController: self)
247262

248263
See `PagingMenuControllerDemo2` target in demo project for more details
249264

250-
### Delegate methods (optional)
265+
### Menu move handler (optional)
251266

252267
```Swift
253-
pagingMenuController.delegate = self
254-
```
268+
public enum MenuMoveState {
269+
case willMoveController(to: UIViewController, from: UIViewController)
270+
case didMoveController(to: UIViewController, from: UIViewController)
271+
case willMoveItem(to: MenuItemView, from: MenuItemView)
272+
case didMoveItem(to: MenuItemView, from: MenuItemView)
273+
}
255274

256-
```Swift
257-
func willMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController) {}
258-
259-
func didMove(toMenu menuController: UIViewController, fromMenu previousMenuController: UIViewController) {}
260-
261-
func willMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView) {}
262-
263-
func didMove(toMenuItem menuItemView: MenuItemView, fromMenuItem previousMenuItemView: MenuItemView) {}
275+
pagingMenuController.onMove = { state in
276+
switch state {
277+
case let .willMoveController(menuController, previousMenuController):
278+
print(previousMenuController)
279+
print(menuController)
280+
case let .didMoveController(menuController, previousMenuController):
281+
print(previousMenuController)
282+
print(menuController)
283+
case let .willMoveItem(menuItemView, previousMenuItemView):
284+
print(previousMenuItemView)
285+
print(menuItemView)
286+
case let .didMoveItem(menuItemView, previousMenuItemView):
287+
print(previousMenuItemView)
288+
print(menuItemView)
289+
}
290+
}
264291
```
265292

266293
### Moving to a menu tag programmatically
@@ -279,7 +306,7 @@ It creates a new paging menu controller. Do not forget to cleanup properties in
279306

280307
iOS9+
281308
Swift 3.0+
282-
Xcode 8.0+
309+
Xcode 8.0+
283310

284311
[v1.4.0](https://github.com/kitasuke/PagingMenuController/releases/tag/1.4.0) for iOS 8 in Swift 3.0
285312
[v1.2.0](https://github.com/kitasuke/PagingMenuController/releases/tag/1.2.0) for iOS 8 in Swift 2.3

0 commit comments

Comments
 (0)