Genellikle projede kullanılabilecek ve bir sol menü düğmesi gibi birçok kez bir yan menüyü açmak için projede kullanılabilecek önceden tanımlanmış bir UIBarButtonItem
kümesi var. Farklı UIViewController
s'de sunulan görünüm denetleyicisini kapatan bir kapatma düğmesi de kullanılabilir.Projenin herhangi bir UIViewController'ına bar düğme öğeleri ekleme Genel Genel zarif yolu
Klasik yol, bu düğmeleri gerektiği gibi eklemektir, ancak bu bir kod çoğaltması sunar ve hepimiz bundan kaçınmak isteriz. Daha sonra kullanım
enum BarButtonItemType {
case menu, close, notification
}
enum BarButtonItemPosition{
case right, left
}
extension UIViewController {
func add(barButtons:[BarButtonItemType], position: BarButtonItemPosition) {
let barButtonItems = barButtons.map { rightBarButtonType -> UIBarButtonItem in
switch rightBarButtonType {
case .menu:
return UIBarButtonItem(image: UIImage(named:"menu"),
style: .plain,
target: self,
action: #selector(presentLeftMenu(_:)))
case .notification:
return UIBarButtonItem(image: UIImage(named:"notification"),
style: .plain,
target: self,
action: #selector(showNotification(_:)))
case .close:
return UIBarButtonItem(image: UIImage(named:"close"),
style: .plain,
target: self,
action: #selector(dismissController(_:)))
}
}
switch position {
case .right:
self.navigationItem.rightBarButtonItems = barButtonItems
case .left:
self.navigationItem.leftBarButtonItems = barButtonItems
}
}
// MARK: Actions
@objc fileprivate func presentLeftMenu(_ sender:AnyObject) {
self.parent?.presentLeftMenuViewController(sender)
}
@objc fileprivate func dismissController(_ sender:AnyObject) {
self.dismiss(animated: true, completion: nil)
}
@objc fileprivate func showNotification(_ sender:AnyObject) {
let notificationViewController = UINavigationController(rootViewController:NotificationViewController())
self.present(notificationViewController, animated: true, completion: nil)
}
}
ve: my yaklaşımın
override func viewDidLoad() {
super.viewDidLoad()
self.add(barButtons: [.close], position: .right)
self.add(barButtons: [.menu], position: .left)
}
sınırlamalar şunlardır:
- bir yaklaşım ile gelip listem ama kusursuz olmaktan uzak
Uzantının, yeni görünüm denetleyicisini nasıl örnekleyeceğini (örneğin bildirim durumu) ve ne gerekiyorsa gerektiğini bilmesi gerekir. Kontrolör
Size sadece
UIViewController
zarif değil sunmak istediğiniz varsayar parametrelerle inited edilmelidir.
Ben, daha fazla esneklik ile herhangi bir düşünce amaçlanan sonuca ulaşabileceği programlama odaklı Swift dil ve protokolle daha iyi bir yol olduğunu eminim?