Swiftgram/Display/BarButtonItemWrapper.swift
2015-07-30 01:09:30 +03:00

50 lines
1.7 KiB
Swift

import UIKit
import AsyncDisplayKit
internal class BarButtonItemWrapper {
let parentNode: ASDisplayNode
let barButtonItem: UIBarButtonItem
let layoutNeeded: () -> ()
let buttonNode: NavigationButtonNode
private var setEnabledListenerKey: Int!
private var setTitleListenerKey: Int!
init(parentNode: ASDisplayNode, barButtonItem: UIBarButtonItem, layoutNeeded: () -> ()) {
self.parentNode = parentNode
self.barButtonItem = barButtonItem
self.layoutNeeded = layoutNeeded
self.buttonNode = NavigationButtonNode()
self.buttonNode.pressed = { [weak self] in
self?.barButtonItem.performActionOnTarget()
return
}
self.parentNode.addSubnode(self.buttonNode)
self.setEnabledListenerKey = barButtonItem.addSetEnabledListener({ [weak self] enabled in
self?.buttonNode.enabled = enabled
return
})
self.setTitleListenerKey = barButtonItem.addSetTitleListener({ [weak self] title in
self?.buttonNode.text = title
if let layoutNeeded = self?.layoutNeeded {
layoutNeeded()
}
return
})
self.buttonNode.text = barButtonItem.title ?? ""
self.buttonNode.enabled = barButtonItem.enabled ?? true
self.buttonNode.bold = (barButtonItem.style ?? UIBarButtonItemStyle.Plain) == UIBarButtonItemStyle.Done
}
deinit {
self.barButtonItem.removeSetTitleListener(self.setTitleListenerKey)
self.barButtonItem.removeSetEnabledListener(self.setEnabledListenerKey)
self.buttonNode.removeFromSupernode()
}
}