2016-09-19 2 views
0

Ich versuche, eine Reihe von customClass-Schaltflächen zu meiner Ansicht automatisch hinzuzufügen, basierend auf der Größe eines Arrays.Prog erstellt Schaltflächen aus der Klasse nicht angezeigt - Swift IOS

Die Klasse erstellt und die entsprechende Methode in der Klasse aufgerufen, aber nichts wird angezeigt. Das Debuggen sagt mir, dass die Methode wie erwartet aufgerufen/ausgeführt wird (3x).

Wenn ich die Funktion direkt zum View-Controller hinzufüge, funktioniert es.

Was fehlt mir hier ???

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 Klassencode:

{ 
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) 
    } 
} 
+0

Eigentlich hier 'self.addSubview (Schaltfläche Neu)' Sie hinzufügen Ihre 'newButton' innerhalb der Schaltfläche Sie erstellen. Vielleicht möchten Sie also ein Argument haben, wo Sie eine 'UIView' zum Einfügen in oder in Ihren' ViewController' geben können. Sie fügen Ihre neu erstellte Schaltfläche manuell hinzu. – Zico

Antwort

0

betrachten Kann Ihr Code wie dieser

class CustomCheckBoxContainer: UIView { 
    var newButton: CustomCheckBox! 


    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(_:)), for: UIControlEvents.TouchUpInside) 
     newButton.isChecked=false 
     self.addSubview(newButton) 
    } 



} 

class CustomCheckBox: UIButton { 
    let checkedImage: UIImage = UIImage(named:"chckbox_on")! 
    let uncheckedImage: UIImage = UIImage(named: "chckbox_off")! 

//add here all your button functionality 
} 

Restrukturierung und dann Ihrer Ansicht nach haben Last so zu etwas ändern :

override func viewDidLoad() { 
    super.viewDidLoad() 

    for item in userArray { 
     let customCheckBoxContainer = CustomCheckBoxContainer() 
     customCheckBoxContainer.showNewButton() 
     self.view.addSubview(customCheckBoxContainer) 
    } 
} 
+0

Irgendwie funktioniert meine Tastenaktion nicht mehr, aber mindestens die Kontrollkästchen erscheinen auf dem Bildschirm. Das hat den Trick gemacht und ich sehe, warum es jetzt sollte. Thnx a 10^6 – RempyAce

0

übergeben Sie Ihre aktuelle Ansicht als Parameter Ihrer Funktion so.

override func viewDidLoad() { 
    super.viewDidLoad() 

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

Ändern Sie bitte Ihre benutzerdefinierten UIButton Funktion NewButton wie diese

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) 
} 
+0

Ja, das hat den Trick gemacht. – RempyAce

Verwandte Themen