在 Swift 中使用 IBOutlet 的 UIImageView 在 Interface Builder 中查看

Posted

技术标签:

【中文标题】在 Swift 中使用 IBOutlet 的 UIImageView 在 Interface Builder 中查看【英文标题】:UIImageView with IBOutlet in Swift to see it in the Interface Builder 【发布时间】:2014-08-05 13:49:39 【问题描述】:

当我像这样将图像插入到我的视图中时,它可以工作:

func loadSomeImage() 
    var imageView = UIImageView(frame: CGRectMake(100, 150, 150, 150))
    var image = UIImage(named: "myImage.jpg")
    imageView.image = image
    self.view.addSubview(imageView)

我对这段代码的问题是,ImageView 没有显示在 Interface Builder 中。

然而,当我编写这段代码时,我得到一个错误:

@IBOutlet weak var imageView: UIImageView
func loadSomeImage() 
    self.imageView = UIImageView(frame: CGRectMake(100, 150, 150, 150))
    var image = UIImage(named: "myImage.jpg")
    imageView.image = image
    self.view.addSubview(imageView)

致命错误:在展开可选值时意外发现 nil

这是为什么呢?我可以插入一个显示在 Interface Builder 中但有我自己的代码实现的图像来更改属性检查器无法更改的某些功能吗?

感谢您的帮助!

【问题讨论】:

imageView是从xib连接到UIImageView的吗? 是的。如果你的意思是实例imageView连接到Interface Builder中的UIImageView类?! 是的,我是这个意思。首先不要这样做:self.imageView = UIImageView(frame: CGRectMake(100, 150, 150, 150)),因为你的imageView已经创建好了,如果你想改变它的框架,那么修改它:CGRect lFrame = CGRectMake(100, 150, 150, 150); self.imageView.frame = lFrame. 当你说“我对这段代码的问题是,ImageView 没有显示在 Interface Builder 中。”你确定吗 ?尝试更改它的背景颜色,也许 imageView 已添加到视图中,但由于未加载图像,因此它是不可见的。 imageView.backgroundColor = UIColor.grayColor(); 【参考方案1】:

您的代码存在两个不同的 UIImageView 实例。一个是通过界面生成器创建的,另一个是通过代码创建的。

self.imageView = UIImageView(frame: CGRectMake(100, 150, 150, 150))

这会创建 UIImageView 的另一个实例,因此它与您放置在界面构建器上的 imageView 不同。只需删除这行代码,它就会工作。如果您使用的是XIB,也无需再次添加Subview。

将您的代码改进为:

@IBOutlet weak var imageView: UIImageView
func loadSomeImage() 
    var image = UIImage(named: "myImage.jpg")
    self.imageView.image = image

这应该足够了。

【讨论】:

我有这段代码,但我得到了致命错误:在展开可选值时意外发现 nil。似乎图像视图没有初始化......? 您的奥特莱斯在 XIB 中连接了吗? 我 ctrl 从板子拖到文件,所以它们应该是。 实际上它与插座不完全相同的是@IBOutlet weak var ImageView: UIImageView!

以上是关于在 Swift 中使用 IBOutlet 的 UIImageView 在 Interface Builder 中查看的主要内容,如果未能解决你的问题,请参考以下文章

快速,为啥我必须使用 IBaction 或 IBOutlet 在代码和 UI 之间进行通信?

Swift 4:@IBOutlet UITextView 崩溃

无法在 Swift 2 中将 TableView @IBOutlet 连接到 ViewController

如何使用 Swift 以编程方式分配 IBOutlet?

swift 协议,IBOutlet 属性不能有非对象类型

Swift ios将多个项目连接到同一个IBOutlet