简体   繁体   中英

iOS: Get 'UIViewController' of 'UIButton'

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM