//
//  NavigationControllerProxy.swift
//  PaiaiUIKit
//
//  Created by ffib on 2019/1/16.
//  Copyright © 2019 yb. All rights reserved.
//

import Foundation

class NavigationControllerProxy: NSObject, UINavigationControllerDelegate {
    weak var delegate: NavigationControllerDelegate?
    
    init(target: NavigationControllerDelegate) {
        delegate = target
    }
    
    func navigationController(_ navigationController: UINavigationController,
                              willShow viewController: UIViewController, animated: Bool) {
        delegate?.navigationController(navigationController, willShow: viewController, animated: animated)
    }
}

extension UINavigationController {
    private struct AssociatedKeys {
        static var proxyKey = "NavigationControllerProxyKey"
    }
    
    private var proxy: NavigationControllerProxy? {
        get { return objc_getAssociatedObject(self, &AssociatedKeys.proxyKey) as? NavigationControllerProxy }
        set { objc_setAssociatedObject(self, &AssociatedKeys.proxyKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
    }
    
    func setDelegate<T: NavigationControllerDelegate>(_ target: T) {
        proxy = NavigationControllerProxy(target: target)
        delegate = proxy
    }
}