【问题标题】:Add a "Done" button to dismiss a programmatically created UIViewController添加“完成”按钮以关闭以编程方式创建的 UIViewController
【发布时间】:2015-11-27 13:28:25
【问题描述】:

我是一个快速的新手,并制作了一个演示应用程序,它在 Storyboard 中有一个 UIViewController 和 UITableViewController。 UIViewController 有一个集合视图和一个嵌入式导航控制器。在点击集合视图单元格时,应用程序会转到 UITableViewController。我也可以从 UITableViewController 回到我的 UIViewController。这一切运作良好。现在,我的 UITableViewController 中的一些行具有 URL。在点击一个 URL 时,我以编程方式在 UIviewcontroller 中创建一个 webview 并获取要在其中加载的 URL。问题是我无法关闭 webview 并在此之后返回我的 UITableViewController。这是我在 UITableViewController 类中的代码:

// When user taps a row, get the URL and load it in a webview
let mywebViewController = UIViewController()
let webView = UIWebView(frame: mywebViewController.view.bounds)
webView.loadRequest(NSURLRequest(URL: url)) // url from the row a user taps
mywebViewController.view = webView
self.navigationController!.presentViewController(mywebViewController, animated: true, completion: nil)

如何向这个以编程方式创建的 UIviewcontroller 添加 Done 按钮以关闭 webview 并返回到我的 UITableViewController

【问题讨论】:

    标签: ios swift uiviewcontroller


    【解决方案1】:

    将完成按钮添加到您呈现的 ViewController 并为其执行操作。 要关闭 ViewController 试试这个:

    self.dismissViewControllerAnimated(true, completion: nil)
    

    【讨论】:

      【解决方案2】:

      mywebViewController 及其@IBAction 中添加按钮,调用

      self.dismissViewControllerAnimated(true, completion: nil)
      

      【讨论】:

        【解决方案3】:

        您可以将mywebViewController 包装在UINavigationController 中,然后将rightBarButtonItem 设置为UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: "dismiss"),如下所示:

        let navController = UINavigationController(rootViewController: mywebViewController)
        mywebViewController.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: self, action: "dismiss")
        
        self.navigationController!.presentViewController(navController, animated: true, completion: nil)
        

        并在您的UITableViewController 中添加dismiss 函数:

        func dismiss() {
            self.dismissViewControllerAnimated(true, completion: nil)
        }
        

        【讨论】:

        • 很有帮助!
        【解决方案4】:

        你可以做一件事。

        当您将 mywebViewController 推送到导航控制器时,请让导航栏可见。

        只需点击导航栏中的“后退”按钮,您就可以轻松关闭您的mywebViewController

        希望这对您有所帮助。 :)

        【讨论】:

        • code: self.navigationController!.pushViewController(mywebViewController, animated: true) 允许我从 webview 回到 UITableViewController。但我想使用“presentViewController”进行测试
        • 那么在这种情况下,您需要在导航栏上添加一个按钮并在按钮的操作中执行 self.dismissViewControllerAnimated(true, completion: nil)。
        【解决方案5】:

        Swift 4 和 5 更新

        在您正在导航的 VC 中

        navController.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.dismiss))
        

        必须将你的选择器声明为@objc func

        @objc func dismiss(){
                self.dismiss(animated: true)
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-26
          • 2016-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多