RempyAce RempyAce - 2 months ago 5
Swift Question

Prog created Buttons from class don't appear - Swift IOS

I'm trying to add a number of customClass buttons to my view automatically, based on the size of an array.

Created the class and called the appropriate method in the class, but nothing shows up. Debugging tells me that the method is called/executed as expected (3x).

When I add the function directly to the view controller it does work.

What am I missing here ???

ViewController code:

import UIKit

class ViewController: UIViewController {

let userArray: [String] = ["One","Two","Three"]

override func viewDidLoad() {
super.viewDidLoad()

for item in userArray {
CustomCheckBox().showNewButton()
}
}

.. Other stuff...
}


CustomButton class code:

{
import UIKit

class CustomCheckBox: UIButton {

let checkedImage: UIImage = UIImage(named:"chckbox_on")!
let uncheckedImage: UIImage = UIImage(named: "chckbox_off")!
var newButton: CustomCheckBox!

..... other functions (isChecked, buttonClicked, ..)

func showNewButton (){
newButton = CustomCheckBox (type: UIButtonType.Custom)
newButton.bounds = CGRect(x: 0, y: 0, width: 45, height: 45)
newButton.center = CGPoint(x: 40, y: 40)
newButton.addTarget(newButton, action: #selector(CustomCheckBox.buttonClicked(_:)), forControlEvents: UIControlEvents.TouchUpInside)
newButton.isChecked=false
self.addSubview(newButton)
}
}

Answer

pass your current View as parameter of your function like this.

override func viewDidLoad() {
    super.viewDidLoad()

    for item in userArray {
        CustomCheckBox().showNewButton(self.view)
    }
}

Modify your custom UIButton function newButton like this

func showNewButton (currentView : UIView){
    newButton = CustomCheckBox (type: UIButtonType.Custom)
    newButton.bounds = CGRect(x: 0, y: 0, width: 45, height: 45)
    newButton.center = CGPoint(x: 40, y: 40)
    newButton.addTarget(newButton, action: #selector(CustomCheckBox.buttonClicked(_:)), forControlEvents: UIControlEvents.TouchUpInside)
    newButton.isChecked=false
    currentView.addSubview(newButton)
}
Comments