【问题标题】:Why is my popup view is empty?为什么我的弹出视图是空的?
【发布时间】:2015-04-01 06:07:28
【问题描述】:

我正在尝试制作类似于this one 的弹出视图。到目前为止我所做的是:

  • 打开一个新的单一视图项目。
  • 在主视图中添加了一个按钮。
  • 添加了一个名为“popup.xib”的新 xib 文件
  • 添加了一个名为“PopupViewController.swift”的新 swift 文件
  • 在身份选项卡中,我将第一响应者类设为“PopupViewController”
  • 我在 popup.xib 中添加了一个标签、一个按钮和一个具有不同背景颜色的视图。当然,所有内容都对其应该出现的位置有所限制。

我的代码:

ViewController.swift

import UIKit

class ViewController: UIViewController {

    @IBAction func showPopup(sender: AnyObject) {
        var x = PopupViewController()
        x.show(self.view)
        x.showAnimate()
    }
}

PopupViewController

import UIKit

class PopupViewController : UIViewController {

    func show(tView : UIView) {
        tView.addSubview(self.view)
        println("here")
        self.view.backgroundColor = UIColor.redColor()

    }

    func showAnimate() {
        self.view.transform = CGAffineTransformMakeScale(1.0, 1.0)
        self.view.alpha = 0.3
    }

}

结果:当按钮被按下时,我在视图上得到了一个红色的覆盖(因为我添加的视图是红色的并且有 30% 的不透明度),但是新的视图是空的。没有按钮,没有标签,没有不同颜色的区域。

我需要做什么才能让 popup.xib 显示它的元素?


更新

除了Nerkyators 的答案之外,我还缺少文件所有者和主视图之间的连接。只需右键单击“File's Onwer”,然后从视图拖动到其下方两行的主视图。

【问题讨论】:

    标签: ios swift xcode6 xib


    【解决方案1】:

    您需要手动加载与您的视图关联的 xib。 我使用这个扩展 (found at this link) 修改为支持 UIViewController,然后在需要时调用它。

    extension UIViewController {
        class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> Self? {
            return UINib(
                nibName: nibNamed,
                bundle: bundle
                ).instantiateWithOwner(nil, options: nil)[0] as? UIViewController
        }
    }
    

    然后

    @IBAction func showPopup(sender: AnyObject) {
        var x = PopupViewController.loadFromNibNamed("popup")
        //do what you need with x
    }
    

    【讨论】:

    • 感谢您的回答。出于某种原因,我得到了'PopupViewController.Type' does not have a member named 'loadControllerFromNibNamed'。试图把它放在两个文件和一个单独的文件中。没有任何效果。 (我试图重新构建一个干净的版本)
    • 我编辑了我之前的回复,上面有一个错字。现在它是正确的(loadFromNibNamed 中不再有“控制器”)。
    • 现在它可以编译了,但由于某种原因 x 为 nil,当我访问它时出现错误。
    • 作为参数发送给loadFromNibNamed的“弹出”应该是文件名吧?
    • 通过使用Self?作为返回类型,可以避免强制转换结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2017-03-04
    • 2010-10-26
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多