I need to get a reference (object) of UIViewController
in sub class of UIButton
. Here I've tried something but failed.
class NavigationBarButton: UIButton {
override func didMoveToSuperview() {
super.didMoveToSuperview()
var viewController: UIViewController? {
var nextResponder: UIResponder? = self
repeat {
nextResponder = nextResponder?.next
if let viewController = nextResponder as? UIViewController {
return viewController
}
} while nextResponder != nil
return nil
}
guard let vcViewController = self.viewController else { print("NavigationBarButton view controller could not found"); return }
print("handle further operations with ViewController of Button")
}
}
class FirstVC: UIViewController {
@IBOutlet weak var myButton: NavigationBarButton?
}
Result:
NavigationBarButton view controller could not found
Is there any other way, without updating UIViewController, I can get view controller reference in sub class of UIButton. Any other UIButton method can help me here, where I can get view controller of button.
Similar SO Que. but not useful for this issue: Get current UIViewController from UIButton's class
This may work for you.
class NavigationBarButton: UIButton {
override func didMoveToWindow() {
super.didMoveToWindow()
var viewController: UIViewController? {
var nextResponder: UIResponder? = self
repeat {
nextResponder = nextResponder?.next
if let viewController = nextResponder as? UIViewController {
return viewController
}
} while nextResponder != nil
return nil
}
guard let vcViewController = self.viewController else { print("NavigationBarButton view controller could not found"); return }
print("handle further operations with ViewController of Button")
}
}
class FirstVC: UIViewController {
@IBOutlet weak var myButton: NavigationBarButton?
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.