{"id":7381,"date":"2022-09-12T20:47:45","date_gmt":"2022-09-12T12:47:45","guid":{"rendered":"http:\/\/123.57.164.21\/?p=7381"},"modified":"2022-09-12T20:47:45","modified_gmt":"2022-09-12T12:47:45","slug":"swift%e9%a1%b5%e9%9d%a2%e8%b7%b3%e8%bd%ac%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e5%bc%8f","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=7381","title":{"rendered":"Swift\u9875\u9762\u8df3\u8f6c\u7684\u51e0\u79cd\u65b9\u5f0f"},"content":{"rendered":"\n<p>\u4eca\u5929\u641e\u901a\u4e86swift\u9875\u9762\u8df3\u8f6c\u3002\u5982\u679c\u5bf9\u6bd4\u524d\u7aef\u6216\u8005\u8bf4web\u5e94\u7528\uff0c\u5176\u5b9e\u5c31\u662f\u201c\u8def\u7531\u201d\uff0c\u50cfreact\u5e94\u7528\uff0c\u53ef\u4ee5\u901a\u8fc7react-router\u6765\u7ba1\u7406\u8def\u7531\uff0cvue\u53ef\u4ee5\u901a\u8fc7vue-router\u6765\u7ba1\u7406\u8def\u7531\u7c7b\u4f3c\uff0cswift\u4e2d\u53ef\u4ee5\u7528<code>UINavigationController<\/code>\u6765\u7ba1\u7406\u201c\u8def\u7531\u201d\uff0c\u8fd9\u91cc\u5e94\u8be5\u53eb\u201c\u5bfc\u822a\u201d\u5427\u3002iOS\u4e2d\u6709\u4e24\u79cd\u4e0d\u540c\u5f62\u5f0f\u7684\u8df3\u8f6c\uff0c\u4e00\u79cd\u662f\u6709\u903b\u8f91\u5c42\u7ea7\u5173\u7cfb\u7684\u8df3\u8f6c\uff0c\u4e00\u79cd\u662f\u4e34\u65f6\u9875\u9762\u7684\u8df3\u8f6c\u3002<\/p>\n\n\n\n<p><strong>1.\u4e34\u65f6\u7684\u9875\u9762\u8df3\u8f6c<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>\u6211\u89c9\u5f97\u53ef\u4ee5\u770b\u4f5c\u662f\u4e00\u4e2a\u5f39\u51fa\u9875\uff0c\u6bd4\u5982\u70b9\u51fb\u4e00\u4e2a\u8868\u5355\u63a7\u4ef6\uff0c\u53ef\u4ee5\u5f39\u51fa\u4e00\u4e2a\u76f8\u5e94\u7684\u7f16\u8f91\u9875\u3002\u8fd9\u4e2a\u662f\u5c5e\u4e8e\u8be5\u9875\u9762\u7684\u884c\u4e3a\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u5168\u5c40\u4f7f\u7528\uff0c\u89c6\u56fe\u81ea\u5e26\u3002<\/p>\n\n\n\n<p>\u8df3\u8f6c\u5230\u4e0b\u4e00\u9875\uff0c\u53ef\u4ee5\u7528<code>self.present(anotherView, animated: true, completion: nil)<\/code>,\u8fd9\u6837\u9875\u9762\u4f1a\u4ece\u5e95\u90e8\u5f39\u51fa\u3002\u6536\u56de\u9875\u9762\uff0c\u8c03\u7528<code>self.dismiss(animated: true, completion: nil)<\/code>\u3002\u8fd9\u91cc\u7070\u5e38\u7b80\u5355\uff0c\u5c31\u8ba4\u8bc6\u4fe9\u65b9\u6cd5\u800c\u5df2\u3002<\/p>\n\n\n\n<p>ViewController.swift<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import UIKit\n\n\nclass ViewController: UIViewController {\n    \n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        initBtn()\n    }\n\n    \/\/\u521d\u59cb\u5316\u6309\u94ae\uff0c\u70b9\u51fb\u6309\u94ae\u8df3\u8f6c\u9875\u9762\n    func initBtn() {\n        let screenSize = UIScreen.main.bounds.size\n        let jumpBtn = UIButton(type: .system)\n        jumpBtn.setTitle(\"\u8df3\u8f6c\", for: .normal)\n        jumpBtn.frame = CGRect(x: screenSize.width \/ 2 - 50, y: screenSize.height - 50, width: 100, height: 30)\n        jumpBtn.backgroundColor = .blue\n        jumpBtn.setTitleColor(UIColor.white, for: .normal)\n        \/\/\u6309\u94ae\u7ed1\u5b9a\u4e8b\u4ef6\uff0c\u70b9\u51fb\u65f6\u6267\u884c\n        jumpBtn.addTarget(self, action: #selector(pageJump), for: .touchDown)\n        self.view.addSubview(jumpBtn)\n\n    }\n    \n    @objc func pageJump() {\n        print(\"main to dest\")\n        \/\/\u521b\u5efa\u4e00\u4e2a\u9875\u9762\n        let destination = DestinationViewController()\n        \/\/\u53d6\u76ee\u6807\u9875\u9762\u7684\u4e00\u4e2a\u53d8\u91cf\u8fdb\u884c\u8d4b\u503c\uff0c\u4ee5\u5c5e\u6027\u7684\u65b9\u5f0f\u8fdb\u884c\u4f20\u503c\u3002\n        destination.message = \"\u4f20\u9012\u7684\u4fe1\u606f\"\n        \/\/\u8df3\u8f6c\n        self.present(destination, animated: true, completion: nil)\n        \n    }\n}\n<\/pre>\n\n\n\n<p>DestinationViewContrller.swift<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import UIKit\n\n\nclass DestinationViewController: UIViewController {\n\n    var message: String?\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        self.view.backgroundColor = UIColor.white\n        initBtn()\n        print(message!)\n    }\n    \/\/\u521d\u59cb\u5316\u8fd4\u56de\u6309\u94ae\uff0c\u70b9\u51fb\u6309\u94ae\u8fd4\u56de\u4e3b\u9875\u9762\u3002\n    func initBtn() {\n        let screenSize = UIScreen.main.bounds.size\n        let jumpBtn = UIButton(type: .system)\n        jumpBtn.setTitle(\"\u8fd4\u56de\", for: .normal)\n        jumpBtn.frame = CGRect(x: screenSize.width \/ 2 - 50, y: screenSize.height - 100, width: 100, height: 30)\n        jumpBtn.backgroundColor = .red\n        jumpBtn.setTitleColor(UIColor.white, for: .normal)\n        \/\/\u6309\u94ae\u7ed1\u5b9a\u4e8b\u4ef6\n        jumpBtn.addTarget(self, action: #selector(pageReturn), for: .touchDown)\n        self.view.addSubview(jumpBtn)\n    }\n    \n    @objc func pageReturn() {\n        print(\"dest to main\")\n        \/\/\u8fd4\u56de\u4e3b\u9875\u9762\n        self.dismiss(animated: true, completion: nil)\n    }\n    \n}<\/pre>\n\n\n\n<p><strong>2.\u5177\u6709\u903b\u8f91\u5c42\u6b21\u7684\u9875\u9762\u8df3\u8f6c<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>\u6bd4\u5982\u7f51\u4e0a\u8d2d\u7269\uff0c\u4e0b\u5355\u4e4b\u540e\u8981\u8df3\u5230\u8ba2\u5355\u9875\u9762\uff0c\u518d\u8df3\u5230\u652f\u4ed8\u9875\u9762\u7b49\u7b49\uff0c\u8fd9\u79cd\u8df3\u8f6c\u662f\u6709\u4e00\u5b9a\u903b\u8f91\uff0c\u6216\u8005\u8bf4\u5148\u540e\u987a\u5e8f\u7684\u3002\u8fd9\u79cd\u8df3\u8f6c\u9700\u8981\u7528<code>NavigationViewController<\/code>\u8fdb\u884c\u8df3\u8f6c\u3002<\/p>\n\n\n\n<p>\u8fd8\u662f\u4e0a\u9762\u90a3\u4e2a\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import UIKit\n\n\nclass ViewController: UIViewController {\n    \n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        initBtn()\n    }\n\n    \/\/\u521d\u59cb\u5316\u6309\u94ae\uff0c\u70b9\u51fb\u6309\u94ae\u8df3\u8f6c\u9875\u9762\n    func initBtn() {\n        let screenSize = UIScreen.main.bounds.size\n        let jumpBtn = UIButton(type: .system)\n        jumpBtn.setTitle(\"\u8df3\u8f6c\", for: .normal)\n        jumpBtn.frame = CGRect(x: screenSize.width \/ 2 - 50, y: screenSize.height - 50, width: 100, height: 30)\n        jumpBtn.backgroundColor = .blue\n        jumpBtn.setTitleColor(UIColor.white, for: .normal)\n        \/\/\u6309\u94ae\u7ed1\u5b9a\u4e8b\u4ef6\uff0c\u70b9\u51fb\u65f6\u6267\u884c\n        jumpBtn.addTarget(self, action: #selector(pageJump), for: .touchDown)\n        \n        self.view.addSubview(jumpBtn)\n    }\n    \n    @objc func pageJump() {\n        print(\"main to dest\")\n        \/\/\u521b\u5efa\u4e00\u4e2a\u9875\u9762\n        let destination = DestinationViewController()\n        \/\/\u53d6\u76ee\u6807\u9875\u9762\u7684\u4e00\u4e2a\u53d8\u91cf\u8fdb\u884c\u8d4b\u503c\uff0c\u4ee5\u5c5e\u6027\u7684\u65b9\u5f0f\u8fdb\u884c\u4f20\u503c\u3002\n        destination.message = \"\u4f20\u9012\u7684\u4fe1\u606f\"\n        \/\/\u8df3\u8f6c\n        self.navigationController?.pushViewController(destination, animated: true)\n    }\n}\n<\/pre>\n\n\n\n<p>DestinationViewController.swift<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import UIKit\n\n\nclass DestinationViewController: UIViewController {\n\n    var message: String?\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        self.view.backgroundColor = UIColor.white\n        initBtn()\n        print(message!)\n    }\n    \/\/\u521d\u59cb\u5316\u8fd4\u56de\u6309\u94ae\uff0c\u70b9\u51fb\u6309\u94ae\u8fd4\u56de\u4e3b\u9875\u9762\u3002\n    func initBtn() {\n        let screenSize = UIScreen.main.bounds.size\n        let jumpBtn = UIButton(type: .system)\n        jumpBtn.setTitle(\"\u8fd4\u56de\", for: .normal)\n        jumpBtn.frame = CGRect(x: screenSize.width \/ 2 - 50, y: screenSize.height - 50, width: 100, height: 30)\n        jumpBtn.backgroundColor = .red\n        jumpBtn.setTitleColor(UIColor.white, for: .normal)\n        \/\/\u6309\u94ae\u7ed1\u5b9a\u4e8b\u4ef6\n        jumpBtn.addTarget(self, action: #selector(pageReturn), for: .touchDown)\n        self.view.addSubview(jumpBtn)\n    }\n    \n    @objc func pageReturn() {\n        print(\"dest to main\")\n        \/\/\u8fd4\u56de\u4e3b\u9875\u9762\n        self.navigationController?.popViewController(animated: true)\n        \n    }\n    \n}<\/pre>\n\n\n\n<p>\u4f46\u662f\u5982\u679c\u8fd9\u65f6\u7f16\u8bd1\u9875\u9762\uff0c\u5728\u6a21\u62df\u5668\u4e2d\u70b9\u51fbNext\u6309\u94ae\uff0c\u53d1\u73b0\u5e76\u6ca1\u6709\u4efb\u4f55\u4e8b\u60c5\u53d1\u751f\ud83d\ude05\u8fd9\u5757\u627e\u4e86\u534a\u5929\u624d\u627e\u5230\u89e3\u51b3\u529e\u6cd5\uff0c\u6700\u540e\u53d1\u73b0\uff0c\u662f\u6ca1\u6709\u5b9e\u4f8b\u5316<code>UINavigationController<\/code>\uff0c\u5176\u5b9e\u770b\u5230<code>navigationController<\/code>\u662f\u4e00\u4e2a\u53ef\u9009\u7c7b\u578b\u5c31\u53ef\u4ee5\u731c\u5230\u4e00\u4e8c\u3002<\/p>\n\n\n\n<p>\u63a5\u4e0b\u6765\uff0c\u8be5\u5728\u4ec0\u4e48\u5730\u65b9\u5b9e\u4f8b\u5316\u8fd9\u4e2a<code>UINavigationController<\/code>\u5462\uff1f\u5982\u679c\u4f60\u76f4\u63a5\u5728\u9875\u9762\u5b9e\u4f8b\u5316\uff0c\u53d1\u73b0\u4e00\u6837\u4e0d\u7ba1\u7528\u3002\u7c7b\u6bd4\u4e00\u4e0breact\u91cc\u7684\u8def\u7531(react-router 4.0\u4e4b\u524d\u7684\u7248\u672c)\uff0c\u5c31\u4f1a\u53d1\u73b0\uff0c\u5bfc\u822a\u5176\u5b9e\u662f\u4e00\u4e2a\u5168\u5c40\u7684\u4e1c\u897f\uff0c\u6765\u7ba1\u7406\u6240\u6709\u7684\u754c\u9762\u5806\u6808\uff0c\u800c\u4e0d\u662f\u5b58\u5728\u4e8e\u67d0\u4e00\u4e2a\u9875\u9762\u5185\u3002\u5982\u679c\u653e\u5165\u67d0\u4e00\u4e2a\u9875\u9762\u5185\uff0c\u6bcf\u6b21\u52a0\u8f7d\u90fd\u662f\u5b9e\u4f8b\u5316\u7684\u4e00\u4e2a\u65b0<code>UINavigationController<\/code>\uff0c\u5b83\u5728\u5176\u4ed6\u9875\u9762\u662f\u6ca1\u6cd5\u88ab\u62ff\u5230\u7684\u3002\u5982\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u5982\u679c\u5728\u7b2c\u4e00\u9875\u5b9e\u4f8b\u5316\u4e00\u4e2a\u5bfc\u822a\u63a7\u5236\u5668\uff0c\u5728\u7b2c\u4e8c\u9875\u4e2d\u662f\u62ff\u4e0d\u5230\u7684\u3002\u6240\u4ee5\uff0c\u8981\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u5c31\u8981\u5b9e\u4f8b\u5316\u4e00\u4e2a\u5168\u5c40\u7684<code>UINavigationController<\/code>\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u53ef\u4ee5\u5728<code>AppDelegate.swift<\/code>\u4e2d\u5b9e\u4f8b\u5316\u8fd9\u4e2a\u5168\u5c40\u5bfc\u822a\u5668\u3002\u5982\u679c\u6709<code>SceneDelegate.swift<\/code>\u4e2d\u5b9e\u4f8b\u5316\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class SceneDelegate: UIResponder, UIWindowSceneDelegate {\n\n    var window: UIWindow?\n\n    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n        \/\/ Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.\n        \/\/ If using a storyboard, the `window` property will automatically be initialized and attached to the scene.\n        \/\/ This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).\n        guard let _ = (scene as? UIWindowScene) else { return }\n\n        let vc = ViewController()\n        let navRoot = UINavigationController(rootViewController: vc)\n        self.window?.rootViewController = navRoot\n        self.window?.backgroundColor = UIColor.white\n    }\n    ...\n    ...\n}<\/pre>\n\n\n\n<p>\u5373\u901a\u8fc7\u7ed9window\u7684rootViewController\u8d4b\u503c\u4e00\u4e2a<code>UINavigationController<\/code>\u5b9e\u4f8b\uff0c\u5c31\u53ef\u4ee5\u5728\u6240\u6709\u9875\u9762\u4f7f\u7528<code>navigationController<\/code>\u4e86\u3002\u8fd9\u91cc\u5176\u5b9e\u662f\u91cd\u5199\u4e86\u5e94\u7528\u542f\u52a8\u540e\u7684\u9ed8\u8ba4\u884c\u4e3a\uff0c\u6240\u4ee5\u9700\u8981\u5728\u5b9e\u4f8b\u5316<code>UINavigationController<\/code>\u65f6\u6307\u5b9a\u4e00\u4e0b\u6839\u8bd5\u56fe\u3002\u7136\u540e\u7ed9\u4e2a\u80cc\u666f\u8272\uff0c\u5426\u5219\u662f\u9ed1\u7684\ud83d\ude13\u3002\u8fd9\u6837\u5c31\u53ef\u4ee5\u4e86\uff0c\u5176\u4ed6\u9875\u9762\u76f4\u63a5\u4f7f\u7528<code>pushViewController<\/code>\u548c<code>popViewController<\/code>\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n\n\n\n<p>\u8fd8\u6709\u4e24\u4e2a\u6709\u7528\u7684\u8df3\u8f6c\u65b9\u6cd5<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/    \u7b2c\u4e09\u4e2a\u6309\u94ae\u7ed1\u5b9a\u7684\u65b9\u6cd5\uff0c\u6839\u636e\u5168\u5c40\u5e8f\u53f7\uff0c\u67e5\u627e\u5806\u6808\u4e2d\u6307\u5b9a\u5e8f\u53f7\u7684\u89c6\u56fe\u63a7\u5236\u5668\n    @objc func gotoIndexPage(){\n        let viewController = self.navigationController?.viewControllers[1]\n        self.navigationController?.popToViewController(viewController!, animated: true)\n    }\n    \/\/    \u521b\u5efa\u7b2c\u56db\u4e2a\u6309\u94ae\u7ed1\u5b9a\u7684\u65b9\u6cd5,\u6240\u6709\u5b50\u89c6\u56fe\u51fa\u6808\n    @objc func gotoRootPage(){\n        self.navigationController?.popToRootViewController(animated: true)\n    }<\/pre>\n\n\n\n<p><strong>3. segue<\/strong><\/p>\n\n\n\n<p>\u4f7f\u7528segue\u8fdb\u884c\u8df3\u8f6c\u7b2c\u4e00\u6b65\u5fc5\u987b\u5728storyboard\u4e2d\u521b\u5efasegue\uff0c\u6682\u4e0d\u8ba8\u8bba\u3002\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u5929\u641e\u901a\u4e86swift\u9875\u9762\u8df3\u8f6c\u3002\u5982\u679c\u5bf9\u6bd4\u524d\u7aef\u6216\u8005\u8bf4web\u5e94\u7528\uff0c\u5176\u5b9e\u5c31\u662f\u201c\u8def\u7531\u201d\uff0c\u50cfreact\u5e94\u7528\uff0c\u53ef\u4ee5\u901a\u8fc7rea [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7381"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7381"}],"version-history":[{"count":1,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7381\/revisions"}],"predecessor-version":[{"id":7382,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/7381\/revisions\/7382"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}