2017-01-12 4 views
0

Erlauben Sie mir, dies vorweg zu sagen, dass ich verschiedene Fragen ähnlich auf Stack Overflow (und das ich bin ein absoluter Neuling für iOS/Swift), und sie hat geholfen. Aber meine Frage ist jetzt wie folgt, eigentlich 2.Wie man richtig eine Schaltfläche mit einem Bild darin erstellt

Die erste ist, ob es möglich ist, Funktionen innerhalb der ViewDidLoad-Methode verschachteln oder nicht? Wenn ich es als func createButton ausprobiere, dann zeigt es nicht einmal zwei verschiedene neue Knöpfe, tatsächlich zeigt es nichts außer dem einzelnen Bild, das ich über das Storyboard hinzugefügt habe.

Zweite Frage ist, was ist die richtige Art, ein Bild zu verweisen, denn wenn ich versuche, meinen Code auszuführen, sehe ich die Erstellung von zwei Schaltflächen, die einfach einen blauen Hintergrund haben. Eine Erweiterung dazu ist die korrekte Syntax für den "action:" - Teil der Schaltflächenerstellung, da ich keine Ahnung habe, wie die eigene Funktion referenziert werden kann.

-Code ist unten:

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     var imageNames : [String] = ["dino2Button", "dino3Button"] 
     var yposition : Int = 133 
     let xposition : Int = 112 
     let width : Int = 150 
     let height : Int = 113 

     //func createButton() { 
      for index in 0...1 { 
       print("index is: \(index)") 
       let image = UIImage(named: imageNames[index]) as UIImage? 
       let button = UIButton(type: .roundedRect) as UIButton 
       button.frame = CGRect(x: xposition, y: (yposition+10), width: width, height: height) 
       yposition += height + 10; 
       button.setImage(image, for: .normal) 
       button.addTarget(self, action: "", for: .touchUpInside) 
       self.view.addSubview(button) 

      } 
     //} 


    } 

Und noch einmal, ich habe iOS für eine Gesamtsumme von zwei Tagen getan.

+0

Hier stimmt einiges nicht. Erstens, vielleicht in erster Linie - wenn Sie gerade mal zwei Tage damit verbringen, iOS & Swift zu lernen (und Ihnen gut tut), überlegen Sie sich die Zeit ** jetzt ** zu nehmen, um automatisches Layout statt Frames zu lernen. Unterschiedliche Geräte haben unterschiedliche Rahmengrößen und das automatische Layout ist es wert. Zweitens, der Grund, warum Sie ein leeres/blaues Bild sehen, liegt daran, dass Ihre UIImage NULL ist. Überprüfen Sie Ihre Rechtschreibung, einschließlich Groß-/Kleinschreibung. Auch das einzige UIImage (named :), das ohne Dateierweiterung funktioniert, ist PNG (auch Groß-/Kleinschreibung beachten). Wenn es ein .jpg ist, müssen Sie ".jpg" hinzufügen. – dfd

+0

Drittens, Aktionen in addTarget sind Selektor-Typ - so syntaktisch machen ** ** Selektor (myFunc) ** und fügen Sie eine einfache Funktion, die so etwas wie ** print ("bekam") **, um sicherzustellen, dass die Dinge verdrahtet sind korrekt. Viel Glück! – dfd

+0

@dfd danke für die hilfreichen Hinweise. Anscheinend war mein Problem, dass es button.setBackgroundImage anstatt nur .setImage sein sollte; obwohl es möglich ist, dass ihr Typ .jpg und nicht .png gewesen ist (ich glaube nicht, dass ich das schon überprüft habe). Ich werde sicherlich in Auto-Layouts schauen. Auch eine kurze Frage, wenn Sie für iOS entwickeln, ist Storyboard häufiger für Layout verwendet, oder ist es eine ausgewogene Mischung aus Storyboard und Code? Prost! – SomeStudent

Antwort

0

Ja, es ist möglich, Funktionen in der Ansicht zu laden, die geladen werden, solange sie keine asynchronen Operationen ausführen. Wenn dies der Fall ist, müssen Sie sich bewusst sein, dass Sie nicht garantieren können, dass sie beendet werden, bevor Ihre Ansicht angezeigt wird. Aber abgesehen davon gibt es keine wirklichen Probleme mit Verschachtelungsfunktionen.

EDIT: Überprüfen Sie den Apfel documents

Um Bilder auf den Button hinzuzufügen so geht:

button.setImage(UIImage(named: "checkbox_off"), for: .normal) 
button.setImage(UIImage(named: "checkbox_on"), for: .selected) 
button.setImage(UIImage(named: "checkbox_on"), for: .highlighted) 

eine Aktion auf eine Schaltfläche hinzu:

button.addTarget(self, action: #selector(CheckBox.touchUpInside(_sender:)), for: .touchUpInside) 

Wo CheckBox ist Ihr Klassenname (der Name, unter dem der Button platziert wird oder ein anderer, den Sie anrufen möchten und das Ziel ist poi nting at (in diesem Fall "self"))

func touchUpInside(_sender: Any?) { 

    self.isSelected = !(self.isSelected) 

} 
+0

Jetzt konnte ich die Tastenaktion herausfinden, indem ich folgendes tat: #selector (clicky (sender :)). Als jemand, der aus der Welt von Java kommt, wo alles eine Klasse ist, wie würde mein CheckBox-Klassenname in diesem Fall sein? Außerdem versuche ich, mein Hintergrundbild so falsch einzustellen, dass es nur als blauer Bildschirm angezeigt wird. – SomeStudent

+0

Nun, ich werde verdammt sein, es war button.setBackgroundImage. Alle anderen Antworten, die ich gesehen habe, hatten es als nur button.setImage gesetzt – SomeStudent

+0

Es ist entweder, aber sie tun verschiedene Dinge. Das Hintergrundbild lässt Sie einen Text vor und ein Bild als Hintergrund haben. Das eingestellte Bild macht das Bild zur eigentlichen Schaltfläche. – Pochi

Verwandte Themen