Nitish
Nitish

Reputation: 14123

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.

Upvotes: 0

Views: 3011

Answers (1)

Muzahid
Muzahid

Reputation: 5186

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)

        }

Upvotes: 1

Related Questions