为什么我的弹出视图是空的?
Why is my popup view is empty?
我正在尝试制作类似于 this one 的弹出视图。到目前为止我所做的是:
- 打开一个新的单视图项目。
- 在主视图中添加了一个按钮。
- 添加了一个名为 "popup.xib"
的新 xib 文件
- 添加了一个名为 "PopupViewController.swift"
的新 swift 文件
- 在身份选项卡上,我将第一响应者 class 设为 "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 显示它的元素?
更新
除了 Nerkyator
的回答之外,我还缺少文件所有者和主视图之间的连接。只需右键单击 "File's Onwer" 并从视图拖动到它下方两行的主视图。
您需要手动加载与您的视图关联的 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
}
我正在尝试制作类似于 this one 的弹出视图。到目前为止我所做的是:
- 打开一个新的单视图项目。
- 在主视图中添加了一个按钮。
- 添加了一个名为 "popup.xib" 的新 xib 文件
- 添加了一个名为 "PopupViewController.swift" 的新 swift 文件
- 在身份选项卡上,我将第一响应者 class 设为 "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 显示它的元素?
更新
除了 Nerkyator
的回答之外,我还缺少文件所有者和主视图之间的连接。只需右键单击 "File's Onwer" 并从视图拖动到它下方两行的主视图。
您需要手动加载与您的视图关联的 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
}