【问题标题】:Swift playground: get ViewController to call presentViewControllerSwift Playground:让 ViewController 调用 presentViewController
【发布时间】:2016-01-09 12:09:10
【问题描述】:

我想在 Playground 中使用 UIAlertController。是否可以从 XCPlaygroundPage 获取 ViewController - 以便能够调用 presentViewController?

【问题讨论】:

    标签: ios xcode xcode7 uialertcontroller swift-playground


    【解决方案1】:

    您可以将 liveView 设置为您的窗口在展示之后,以避免出现警告。

    import UIKit
    import PlaygroundSupport
    
    PlaygroundPage.current.needsIndefiniteExecution = true
    let window = UIWindow()
    let viewController = UIViewController()
    window.rootViewController = viewController
    window.makeKeyAndVisible()
    
    let alert = UIAlertController(title: "title here", message: "message here", preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "action here", style: .default, handler: nil))
    viewController.present(alert, animated: true, completion: nil)
    PlaygroundPage.current.liveView = window
    

    结果:

    【讨论】:

      【解决方案2】:

      是的,您当然可以获得视图控制器,但由于没有“附加”视图控制器,您最终会看到如下所示的警告:

      Presenting view controllers on detached view controllers is discouraged

      在我的情况下,警报控制器在屏幕上超级短暂地闪烁然后消失了。或许您可以对此有所改进?

      无论如何,这是我在 Playground 中创建视图控制器的方式:

      import UIKit
      import XCPlayground
      
      class RootViewController: UIViewController {
          override func viewDidLoad() {
              super.viewDidLoad()
              self.view.frame = CGRect(x: 0, y: 0, width: 350, height: 420)
              self.view.backgroundColor = UIColor.redColor()
          }
      }
      
      class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
      
          var tableView: UITableView!
          let items = ["Hello 1", "Hello 2", "Hello 3"]
          var alertController : UIAlertController? {
              didSet {
                  if alertController == nil {
                      print("alertController set to nil")
                  } else {
                      print("alertController set to \(alertController)")
                  }
              }
          }
      
          override func viewDidLoad() {
              super.viewDidLoad()
              self.view.frame = CGRect(x: 0, y: 0, width: 320, height: 480)
              self.tableView = UITableView(frame:self.view.frame)
              self.tableView!.dataSource = self
              self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
              self.view.addSubview(self.tableView)
      
          }
          func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
              return self.items.count;
          }
      
          func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
              let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
              cell.textLabel?.text = "\(self.items[indexPath.row])"
              return cell
          }
      
          override func viewDidAppear(animated: Bool) {
              alertController = UIAlertController.init(title: "My Title", message: "Testing in Playground", preferredStyle: .Alert)
      
              let okAction = UIAlertAction(title: "Ok", style: .Default) { (_) -> Void in
                  // Some action here
                  print("hit okay button")
              }
      
              alertController!.addAction(okAction)
      
              ctrl.presentViewController(alertController!, animated: false, completion: {
                  print("done presenting")
              })
          }
      }
      
      var ctrl = ViewController()
      var rootVC = RootViewController()
      rootVC.addChildViewController(ctrl)
      rootVC.view.addSubview(ctrl.view)
      XCPlaygroundPage.currentPage.liveView = rootVC.view
      

      我在这里做的是创建一个“根视图控制器”,添加一个带有表的子视图控制器(试图将一些视图控制器“附加”到其他东西上),然后我尝试展示一个警报控制器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 2016-03-06
        • 1970-01-01
        • 2014-09-22
        • 1970-01-01
        相关资源
        最近更新 更多