{"id":1988,"date":"2015-12-30T09:00:23","date_gmt":"2015-12-30T15:00:23","guid":{"rendered":"http:\/\/jamesonquave.com\/blog\/?p=1988"},"modified":"2015-12-28T23:03:44","modified_gmt":"2015-12-29T05:03:44","slug":"adding-ibinspectable-to-a-superclass-in-swift","status":"publish","type":"post","link":"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/","title":{"rendered":"Adding IBInspectable to a superclass in Swift"},"content":{"rendered":"<h3 id=\"adding-ibinspectable-to-a-uicollectionviewcell-subclass\">Adding IBInspectable to a UICollectionViewCell subclass<\/h3>\n<p>One very useful feature I find is to add a IBInspectable background image to my views. In an entertainment app I&#8217;m currently building there is a designable cell that looks like this:<\/p>\n<pre><code><div id=\"highlighter_74000\" class=\"syntaxhighlighter nogutter highlightedCode \"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\"><div class=\"line number1 index0 alt2\"><code class=\"keyword\">@IBDesignable<\/code><\/div><div class=\"line number2 index1 alt1\"><code class=\"keyword\">class<\/code> <code class=\"color2\">TrailerCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color2\">MediaCollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number3 index2 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">lengthLabel: <\/code><code class=\"color1\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number4 index3 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBInspectable<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">bgImage: <\/code><code class=\"color2\">UIImage<\/code><code class=\"plain\">! {<\/code><\/div><div class=\"line number5 index4 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">didSet<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number6 index5 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.frame = <\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.bounds<\/code><\/div><div class=\"line number7 index6 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.addSubview(imgView)<\/code><\/div><div class=\"line number8 index7 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.image = bgImage<\/code><\/div><div class=\"line number9 index8 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.contentMode&nbsp; = <\/code><code class=\"color2\">UIViewContentMode<\/code><code class=\"plain\">.<\/code><code class=\"color2\">Center<\/code><\/div><div class=\"line number10 index9 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.sendSubviewToBack(imgView)<\/code><\/div><div class=\"line number11 index10 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">}<\/code><\/div><div class=\"line number12 index11 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">}<\/code><\/div><div class=\"line number13 index12 alt2\"><code class=\"plain\">}<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/code><\/pre>\n<p>what&#8217;s great about this is it gives me a very easy way to set a background image on my TrailerCollectionViewCell. It shows right up in my storyboards so I can easily set it to my &#8220;play&#8221; icon graphic.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/jamesonquave.com\/images\/ibinspectable.png\" alt=\"IBInspectable in Xcode 7\"><\/p>\n<p>Notice on the top-right of the attributes inspector it adds a &#8220;Bg Image&#8221; dropdown. When this is changed the didSet method above is triggered and it updates the view inside of Xcode, and when the iOS app runs. This is happening because the decoding from interface builder will also trigger didSet in the same fashion that interface builder does.<\/p>\n<p>What&#8217;s not so handy about this approach is that I have two other types of CollectionViewCell subclasses that need similar functionality. So, I have these three classes inherit from one superclass that implements the functionality.<\/p>\n<pre><code><div id=\"highlighter_238961\" class=\"syntaxhighlighter nogutter highlightedCode \"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\"><div class=\"line number1 index0 alt2\"><code class=\"keyword\">import<\/code> <code class=\"color2\">Foundation<\/code><\/div><div class=\"line number2 index1 alt1\"><code class=\"keyword\">import<\/code> <code class=\"color1\">UIKit<\/code><\/div><div class=\"line number3 index2 alt2\">&nbsp;<\/div><div class=\"line number4 index3 alt1\"><code class=\"keyword\">class<\/code> <code class=\"color2\">MediaCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color2\">UICollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number5 index4 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">titleLabel: <\/code><code class=\"color2\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number6 index5 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">var<\/code> <code class=\"plain\">imgView = <\/code><code class=\"color1\">UIImageView<\/code><code class=\"plain\">()<\/code><\/div><div class=\"line number7 index6 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBInspectable<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">bgImage: <\/code><code class=\"color2\">UIImage<\/code><code class=\"plain\">! {<\/code><\/div><div class=\"line number8 index7 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">didSet<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number9 index8 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.frame = <\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.bounds<\/code><\/div><div class=\"line number10 index9 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.addSubview(imgView)<\/code><\/div><div class=\"line number11 index10 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.image = bgImage<\/code><\/div><div class=\"line number12 index11 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.contentMode&nbsp; = <\/code><code class=\"color1\">UIViewContentMode<\/code><code class=\"plain\">.<\/code><code class=\"color2\">Center<\/code><\/div><div class=\"line number13 index12 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.sendSubviewToBack(imgView)<\/code><\/div><div class=\"line number14 index13 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">}<\/code><\/div><div class=\"line number15 index14 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">}<\/code><\/div><div class=\"line number16 index15 alt1\"><code class=\"plain\">}<\/code><\/div><div class=\"line number17 index16 alt2\">&nbsp;<\/div><div class=\"line number18 index17 alt1\"><code class=\"keyword\">class<\/code> <code class=\"color2\">TrailerCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color2\">MediaCollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number19 index18 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">lengthLabel: <\/code><code class=\"color1\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number20 index19 alt1\"><code class=\"plain\">}<\/code><\/div><div class=\"line number21 index20 alt2\">&nbsp;<\/div><div class=\"line number22 index21 alt1\"><code class=\"keyword\">class<\/code> <code class=\"color2\">ReviewCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color2\">MediaCollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number23 index22 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">ratingLabel: <\/code><code class=\"color1\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number24 index23 alt1\"><code class=\"plain\">}<\/code><\/div><div class=\"line number25 index24 alt2\">&nbsp;<\/div><div class=\"line number26 index25 alt1\"><code class=\"keyword\">class<\/code> <code class=\"color2\">PlaythroughCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color2\">MediaCollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number27 index26 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">lengthLabel: <\/code><code class=\"color2\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number28 index27 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">ratingLabel: <\/code><code class=\"color2\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number29 index28 alt2\"><code class=\"plain\">}<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/code><\/pre>\n<h3 id=\"it-doesn-t-work-\">It doesn&#8217;t work!<\/h3>\n<p>Here&#8217;s the problem though: The field disappears in my storyboard!<\/p>\n<p>I spent some time debugging this issue, and found that I could work around it by overriding the bgImage variable in my subclasses, but it was <strong>not<\/strong> neccessary to re-implement anything. Success!<\/p>\n<h3 id=\"the-fix\">The fix<\/h3>\n<p>Just adding this line did the trick:<\/p>\n<pre><code><div id=\"highlighter_402175\" class=\"syntaxhighlighter nogutter highlightedCode \"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\"><div class=\"line number1 index0 alt2\"><code class=\"keyword\">@IBInspectable<\/code> <code class=\"keyword\">override<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">bgImage: <\/code><code class=\"color2\">UIImage<\/code><code class=\"plain\">! { <\/code><code class=\"keyword\">didSet<\/code> <code class=\"plain\">{} }<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/code><\/pre>\n<p>So now my complete file looks like this:<\/p>\n<pre><code><div id=\"highlighter_748081\" class=\"syntaxhighlighter nogutter highlightedCode \"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\"><div class=\"line number1 index0 alt2\"><code class=\"keyword\">import<\/code> <code class=\"color2\">Foundation<\/code><\/div><div class=\"line number2 index1 alt1\"><code class=\"keyword\">import<\/code> <code class=\"color1\">UIKit<\/code><\/div><div class=\"line number3 index2 alt2\">&nbsp;<\/div><div class=\"line number4 index3 alt1\"><code class=\"keyword\">class<\/code> <code class=\"color2\">MediaCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color1\">UICollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number5 index4 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">titleLabel: <\/code><code class=\"color1\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number6 index5 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">var<\/code> <code class=\"plain\">imgView = <\/code><code class=\"color1\">UIImageView<\/code><code class=\"plain\">()<\/code><\/div><div class=\"line number7 index6 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBInspectable<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">bgImage: <\/code><code class=\"color2\">UIImage<\/code><code class=\"plain\">! {<\/code><\/div><div class=\"line number8 index7 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">didSet<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number9 index8 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.frame = <\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.bounds<\/code><\/div><div class=\"line number10 index9 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.addSubview(imgView)<\/code><\/div><div class=\"line number11 index10 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.image = bgImage<\/code><\/div><div class=\"line number12 index11 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">imgView.contentMode&nbsp; = <\/code><code class=\"color2\">UIViewContentMode<\/code><code class=\"plain\">.<\/code><code class=\"color2\">Center<\/code><\/div><div class=\"line number13 index12 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">self<\/code><code class=\"plain\">.sendSubviewToBack(imgView)<\/code><\/div><div class=\"line number14 index13 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">}<\/code><\/div><div class=\"line number15 index14 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">}<\/code><\/div><div class=\"line number16 index15 alt1\"><code class=\"plain\">}<\/code><\/div><div class=\"line number17 index16 alt2\">&nbsp;<\/div><div class=\"line number18 index17 alt1\"><code class=\"keyword\">class<\/code> <code class=\"color2\">TrailerCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color2\">MediaCollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number19 index18 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">lengthLabel: <\/code><code class=\"color1\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number20 index19 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBInspectable<\/code> <code class=\"keyword\">override<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">bgImage: <\/code><code class=\"color1\">UIImage<\/code><code class=\"plain\">! { <\/code><code class=\"keyword\">didSet<\/code> <code class=\"plain\">{} }<\/code><\/div><div class=\"line number21 index20 alt2\"><code class=\"plain\">}<\/code><\/div><div class=\"line number22 index21 alt1\">&nbsp;<\/div><div class=\"line number23 index22 alt2\"><code class=\"keyword\">class<\/code> <code class=\"color2\">ReviewCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color2\">MediaCollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number24 index23 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">ratingLabel: <\/code><code class=\"color2\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number25 index24 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBInspectable<\/code> <code class=\"keyword\">override<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">bgImage: <\/code><code class=\"color1\">UIImage<\/code><code class=\"plain\">! { <\/code><code class=\"keyword\">didSet<\/code> <code class=\"plain\">{} }<\/code><\/div><div class=\"line number26 index25 alt1\"><code class=\"plain\">}<\/code><\/div><div class=\"line number27 index26 alt2\">&nbsp;<\/div><div class=\"line number28 index27 alt1\"><code class=\"keyword\">class<\/code> <code class=\"color2\">PlaythroughCollectionViewCell<\/code><code class=\"plain\">: <\/code><code class=\"color2\">MediaCollectionViewCell<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number29 index28 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">lengthLabel: <\/code><code class=\"color2\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number30 index29 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBOutlet<\/code> <code class=\"keyword\">weak<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">ratingLabel: <\/code><code class=\"color1\">UILabel<\/code><code class=\"plain\">!<\/code><\/div><div class=\"line number31 index30 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">@IBInspectable<\/code> <code class=\"keyword\">override<\/code> <code class=\"keyword\">var<\/code> <code class=\"plain\">bgImage: <\/code><code class=\"color2\">UIImage<\/code><code class=\"plain\">! { <\/code><code class=\"keyword\">didSet<\/code> <code class=\"plain\">{} }<\/code><\/div><div class=\"line number32 index31 alt1\"><code class=\"plain\">}<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Adding IBInspectable to a UICollectionViewCell subclass One very useful feature I find is to add a IBInspectable background image to my views. In an entertainment app I&#8217;m currently building there is a designable cell that looks like this: @IBDesignableclass TrailerCollectionViewCell: MediaCollectionViewCell {&nbsp;&nbsp;&nbsp;&nbsp;@IBOutlet weak var lengthLabel: UILabel!&nbsp;&nbsp;&nbsp;&nbsp;@IBInspectable weak var bgImage: UIImage! {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;didSet {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgView.frame = self.bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.addSubview(imgView)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgView.image =&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_links_to":"","_links_to_target":""},"categories":[26,10,71],"tags":[15,34],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Adding IBInspectable to a superclass in Swift - Jameson Quave<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Adding IBInspectable to a superclass in Swift - Jameson Quave\" \/>\n<meta property=\"og:description\" content=\"Adding IBInspectable to a UICollectionViewCell subclass One very useful feature I find is to add a IBInspectable background image to my views. In an entertainment app I&#8217;m currently building there is a designable cell that looks like this: @IBDesignableclass TrailerCollectionViewCell: MediaCollectionViewCell {&nbsp;&nbsp;&nbsp;&nbsp;@IBOutlet weak var lengthLabel: UILabel!&nbsp;&nbsp;&nbsp;&nbsp;@IBInspectable weak var bgImage: UIImage! {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;didSet {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgView.frame = self.bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.addSubview(imgView)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgView.image =...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/\" \/>\n<meta property=\"og:site_name\" content=\"Jameson Quave\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-30T15:00:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-12-29T05:03:44+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/jamesonquave.com\/images\/ibinspectable.png\" \/>\n<meta name=\"author\" content=\"Jameson Quave\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jameson Quave\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/\",\"url\":\"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/\",\"name\":\"Adding IBInspectable to a superclass in Swift - Jameson Quave\",\"isPartOf\":{\"@id\":\"https:\/\/jamesonquave.com\/blog\/#website\"},\"datePublished\":\"2015-12-30T15:00:23+00:00\",\"dateModified\":\"2015-12-29T05:03:44+00:00\",\"author\":{\"@id\":\"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/db6184f355c7f4e3b876d0f228c2fcfc\"},\"breadcrumb\":{\"@id\":\"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jamesonquave.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Adding IBInspectable to a superclass in Swift\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/#website\",\"url\":\"https:\/\/jamesonquave.com\/blog\/\",\"name\":\"Jameson Quave\",\"description\":\"Using computer technology to educate, and improve lives.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jamesonquave.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/db6184f355c7f4e3b876d0f228c2fcfc\",\"name\":\"Jameson Quave\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d9786c83345117d560bbeab0e1f26814?s=96&d=retro&r=pg\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d9786c83345117d560bbeab0e1f26814?s=96&d=retro&r=pg\",\"caption\":\"Jameson Quave\"},\"sameAs\":[\"http:\/\/jamesonquave.com\"],\"url\":\"https:\/\/jamesonquave.com\/blog\/author\/jquave\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Adding IBInspectable to a superclass in Swift - Jameson Quave","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/","og_locale":"en_US","og_type":"article","og_title":"Adding IBInspectable to a superclass in Swift - Jameson Quave","og_description":"Adding IBInspectable to a UICollectionViewCell subclass One very useful feature I find is to add a IBInspectable background image to my views. In an entertainment app I&#8217;m currently building there is a designable cell that looks like this: @IBDesignableclass TrailerCollectionViewCell: MediaCollectionViewCell {&nbsp;&nbsp;&nbsp;&nbsp;@IBOutlet weak var lengthLabel: UILabel!&nbsp;&nbsp;&nbsp;&nbsp;@IBInspectable weak var bgImage: UIImage! {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;didSet {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgView.frame = self.bounds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.addSubview(imgView)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgView.image =...","og_url":"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/","og_site_name":"Jameson Quave","article_published_time":"2015-12-30T15:00:23+00:00","article_modified_time":"2015-12-29T05:03:44+00:00","og_image":[{"url":"http:\/\/jamesonquave.com\/images\/ibinspectable.png"}],"author":"Jameson Quave","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jameson Quave","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/","url":"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/","name":"Adding IBInspectable to a superclass in Swift - Jameson Quave","isPartOf":{"@id":"https:\/\/jamesonquave.com\/blog\/#website"},"datePublished":"2015-12-30T15:00:23+00:00","dateModified":"2015-12-29T05:03:44+00:00","author":{"@id":"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/db6184f355c7f4e3b876d0f228c2fcfc"},"breadcrumb":{"@id":"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jamesonquave.com\/blog\/adding-ibinspectable-to-a-superclass-in-swift\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jamesonquave.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Adding IBInspectable to a superclass in Swift"}]},{"@type":"WebSite","@id":"https:\/\/jamesonquave.com\/blog\/#website","url":"https:\/\/jamesonquave.com\/blog\/","name":"Jameson Quave","description":"Using computer technology to educate, and improve lives.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jamesonquave.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/db6184f355c7f4e3b876d0f228c2fcfc","name":"Jameson Quave","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d9786c83345117d560bbeab0e1f26814?s=96&d=retro&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d9786c83345117d560bbeab0e1f26814?s=96&d=retro&r=pg","caption":"Jameson Quave"},"sameAs":["http:\/\/jamesonquave.com"],"url":"https:\/\/jamesonquave.com\/blog\/author\/jquave\/"}]}},"_links":{"self":[{"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/posts\/1988"}],"collection":[{"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/comments?post=1988"}],"version-history":[{"count":1,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/posts\/1988\/revisions"}],"predecessor-version":[{"id":1989,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/posts\/1988\/revisions\/1989"}],"wp:attachment":[{"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/media?parent=1988"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/categories?post=1988"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/tags?post=1988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}