0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBOutletのUIImageViewで画像が表示されなくなった話

Last updated at Posted at 2024-10-17

起きた問題

タイトルの通り、IBOutletでstoryboadにて設定したUIImageViewに画像が表示されなくなったことがありました。
状況としては、コードでUIImageを設定した時に設定したはずの画像が表示されないというものです。

実際のコード

以下実際の画像が表示できなくなったコードです。
ChatIconViewというカスタムViewでUIImageViewがあり、setupMyIconもしくはsetupTeamMemberIconで画像を設定するようになっています。
しかし、setupTeamMemberIconでは画像が表示されません。

class ChatIconView: UIView {

	// MARK: - IBOutlet property

	@IBOutlet var iconImageView: UIImageView!

	// MARK: - initialize Methods

	required init?(coder aDecoder: NSCoder) {

		super.init(coder: aDecoder)!
		loadNib()
	}

	override init(frame: CGRect) {

		super.init(frame: frame)
		loadNib()
	}

	override class func awakeFromNib() {

		super.awakeFromNib()
	}

 // MARK: - public Methods

	func setupMyIcon(iconImage: UIImage) {

		iconImageView.image = iconImage
	}

	func setupTeamMemberIcon(imageLoader: LoadingImage) { // 問題のコード

		iconImageView = UIImageView(imageLoader)
	}
}

// MARK: - private Methods

private extension ChatIconView {

	func loadNib() {

		let view = UINib(nibName: K.Storyboad.Xib.chatIconView, bundle: nil).instantiate(withOwner: self,
		                                                                                 options: nil)
			.first as! UIView
		view.frame = self.bounds
		self.addSubview(view)
	}
 }

結論

setupTeamMemberIconでは、IBOutletのUIImageViewのオブジェクトをコード上で上書きしてしまっていたためでした。
UIを表示しているのはあくまでstoryboad側の方であり、IBOutletでUIImageViewを参照しているに過ぎないため、そのプロパティに別のUIImageViewを上書きするとstoryboad上のUIImageView(実際に画面に表示されている方)とは別のUIImageViewを参照することとなるためこちらに画像を設定しても画面上では表示されないということになります。

おわり

改めて考えてみると、当たり前な内容でハマってしまいましたが、IBOutletの構造を改めて再認識できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?