Nitish Nitish - 2 months ago 17
Swift Question

Custom UIView not showing anything

I have created a custom

UIView
:

import UIKit

class IndicatorView: UIView {

var image_view_indicator: UIImageView!
var label_indicator: UILabel!

required init(coder decoder: NSCoder) {
super.init(coder: decoder)!
}

init(frame:CGRect, imageName: String, indicatorValue: String)
{
super.init(frame: frame)
self.frame = frame
image_view_indicator = UIImageView(frame: CGRect(x: 0, y: 0, width: 15, height: 15))
image_view_indicator.image = UIImage(named: imageName)
self.addSubview(image_view_indicator)
self.bringSubviewToFront(image_view_indicator)

label_indicator = UILabel(frame: CGRect(x: image_view_indicator.frame.size.width + 3, y: 0, width: 25, height: 15))
label_indicator.text = indicatorValue
label_indicator.textColor = UIColor.blackColor()
self.addSubview(label_indicator)
self.bringSubviewToFront(label_indicator)
}

}


This is my call from
UIViewController
:

view_indicator_friends = IndicatorView(frame: view_indicator_friends.frame, imageName: "friend.png", indicatorValue: "20")


I cross checked the
IBOutlet
connections. They seem to be fine.

But nothing is showing up in the custom view.

Answer

When you take your custom view from Xib through IBOutlet connection then your custom init will not invoked that why your image_view_indicator and label_indicator does not created. Thats why your custom view does not showing up properly. One solution is that implement your code under init(frame:CGRect, imageName: String, indicatorValue: String) method in the awakeFromNib method.

 override func awakeFromNib() {
         let frame =  self.frame
        image_view_indicator = UIImageView(frame: CGRect(x: 0, y: 0, width: 15, height: 15))
        image_view_indicator.image = UIImage(named: imageName)
        self.addSubview(image_view_indicator)
        self.bringSubviewToFront(image_view_indicator)

        label_indicator = UILabel(frame: CGRect(x: image_view_indicator.frame.size.width + 3, y: 0, width: 25, height: 15))
        label_indicator.text = indicatorValue
        label_indicator.textColor = UIColor.blackColor()
        self.addSubview(label_indicator)
        self.bringSubviewToFront(label_indicator)

        }
Comments