UIButton via Code -> ButtonClick Ereignis

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UIButton via Code -> ButtonClick Ereignis

    Hallo,
    ich versuche mich gerade daran einen UIButton via Code hinzuzufügen und eine Action auszulösen...irgendwie funktioniert das ButtonClick Ereignis aber nicht...kann mir vllt. jemand helfen:

    Quellcode

    1. import UIKit
    2. import iOSDropDown
    3. class ScrollViewController: UIViewController {
    4. let scrollView = UIScrollView()
    5. let stackView = UIStackView()
    6. override func viewDidLoad() {
    7. super.viewDidLoad()
    8. self.view.backgroundColor = UIColor.green
    9. //Add and setup scroll view
    10. self.view.addSubview(self.scrollView)
    11. self.scrollView.translatesAutoresizingMaskIntoConstraints = false;
    12. //Constrain scroll view
    13. self.scrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true;
    14. self.scrollView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20).isActive = true;
    15. self.scrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true;
    16. self.scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -20).isActive = true;
    17. //Add and setup stack view
    18. self.scrollView.addSubview(self.stackView)
    19. self.stackView.translatesAutoresizingMaskIntoConstraints = false
    20. self.stackView.axis = .vertical
    21. self.stackView.spacing = 10;
    22. //constrain stack view to scroll view
    23. self.stackView.leadingAnchor.constraint(equalTo: self.scrollView.leadingAnchor).isActive = true;
    24. self.stackView.topAnchor.constraint(equalTo: self.scrollView.topAnchor).isActive = true;
    25. self.stackView.trailingAnchor.constraint(equalTo: self.scrollView.trailingAnchor).isActive = true;
    26. self.stackView.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor).isActive = true;
    27. //constrain width of stack view to width of self.view, NOT scroll view
    28. self.stackView.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true;
    29. //Komponenten hinzufügen
    30. var top = 5
    31. let myButton = UIButton(frame: CGRect(x: 100, y: 100, width: 120, height: 50))
    32. myButton.backgroundColor = UIColor.orange
    33. myButton.setTitle("Hello UIButton", for: .normal)
    34. myButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    35. let view4 = UIView()
    36. view4.addSubview(myButton)
    37. self.stackView.addArrangedSubview(view4)
    38. top = top + 30
    39. }
    40. @objc func buttonAction(sender: UIButton!) {
    41. print("TEST Button")
    42. }
    43. }
    Alles anzeigen
  • Ich tippe mal view4 ist zu klein, da dieser mit der Größe 0 erzeugt wird.

    Um zu prüfen, ob Views und Subviews die gewünschte Größe haben, bietet es sich an diesen zum Testen unterschiedliche Hintergrundfarben zu geben. Weiterhin sollte man bei den Views mit Subviews clipsToBounds setzen. Dann sieht man ganz gut, ob die Subviews "abgeschnitten" oder überhaupt angezeigt werden.

    Ohne clipsToBounds werden die Subviews zwar "ausserhalb" der View Bounds angezeigt, lassen sich aber nicht mehr anklicken, da die Touch Events nur innerhalb der View Bounds verarbeitet bzw. an die Subviews weitergeleitet werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MCDan ()

  • Hallo,
    es hängt glaube ich am StackView

    Quellcode

    1. import UIKit
    2. import iOSDropDown
    3. class QSM_ScrollViewController: UIViewController {
    4. let scrollView = UIScrollView()
    5. let stackView = UIStackView()
    6. var cboStufe1 = DropDown()
    7. var cboStufe2 = DropDown()
    8. var cboStufe3 = DropDown()
    9. var cboFehlerart = DropDown()
    10. var cboAbteilung = DropDown()
    11. var cboPrioitaet = DropDown()
    12. var btnTraceCodes = UIButton()
    13. var txtBeschreibung = UILabel()
    14. var stufe1ID = ""
    15. var stufe2ID = ""
    16. var stufe3ID = ""
    17. override func viewDidLoad() {
    18. super.viewDidLoad()
    19. //scrollView.frame = self.view.frame
    20. scrollView.backgroundColor = UIColor.green
    21. //Add and setup scroll view
    22. self.view.addSubview(self.scrollView)
    23. self.scrollView.translatesAutoresizingMaskIntoConstraints = false;
    24. //Constrain scroll view
    25. self.scrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true;
    26. self.scrollView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20).isActive = true;
    27. self.scrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true;
    28. self.scrollView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -20).isActive = true;
    29. //Add and setup stack view
    30. self.scrollView.addSubview(self.stackView)
    31. self.stackView.translatesAutoresizingMaskIntoConstraints = false
    32. self.stackView.axis = .vertical
    33. self.stackView.spacing = 10;
    34. //constrain stack view to scroll view
    35. self.stackView.leadingAnchor.constraint(equalTo: self.scrollView.leadingAnchor).isActive = true;
    36. self.stackView.topAnchor.constraint(equalTo: self.scrollView.topAnchor).isActive = true;
    37. self.stackView.trailingAnchor.constraint(equalTo: self.scrollView.trailingAnchor).isActive = true;
    38. self.stackView.bottomAnchor.constraint(equalTo: self.scrollView.bottomAnchor).isActive = true;
    39. //constrain width of stack view to width of self.view, NOT scroll view
    40. self.stackView.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true;
    41. stackView.backgroundColor = UIColor.blue
    42. //stackView.clipsToBounds = true
    43. stackView.frame = CGRect(x: 0, y: 0, width: 200, height: 100)
    44. let myButton = UIButton(frame: CGRect(x: 0, y: 0, width: 150, height: 50))
    45. myButton.backgroundColor = UIColor.orange
    46. myButton.setTitle("Hello UIButton", for: .normal)
    47. myButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    48. let view1 = UIView(frame: CGRect(x: 40, y: 40, width: 150, height: 50))
    49. view1.backgroundColor = UIColor.red
    50. view1.addSubview(myButton)
    51. view1.clipsToBounds = true
    52. self.stackView.addSubview(view1)
    53. let myButton1 = UIButton(frame: CGRect(x: 0, y: 0, width: 150, height: 50))
    54. myButton1.backgroundColor = UIColor.orange
    55. myButton1.setTitle("Hello UIButton", for: .normal)
    56. myButton1.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    57. let view2 = UIView(frame: CGRect(x: 100, y: 750, width: 150, height: 50))
    58. view2.backgroundColor = UIColor.red
    59. view2.addSubview(myButton1)
    60. view2.clipsToBounds = true
    61. self.stackView.addSubview(view2)
    62. }
    63. @objc func buttonAction(sender: UIButton!) {
    64. print("TEST Button")
    65. }
    66. }
    Alles anzeigen
    wenn ich den StackView weglasse und den view1 direkt in Scrollview einfüge geht der Button noch...leider geht dann das Scrollen nicht

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von TP84 ()