UIKit Framework - Snippets: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 41: Zeile 41:
 
//...
 
//...
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== Segue für mehrere Views einsetzen ==
 +
Hier ist ein Beispiel, wie Sie in der prepare(for:sender:)-Funktion einen Wert setzen und ihn im Zielview anzeigen könnten:
 +
 +
<syntaxhighlight lang="Swift">
 +
class SourceViewController: UIViewController {
 +
 +
    var selectedItem: String?
 +
 +
    // ...
 +
 +
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
 +
        if segue.identifier == "showDetail" {
 +
            let destination = segue.destination as! DetailViewController
 +
            destination.selectedItem = selectedItem
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 +
<syntaxhighlight lang="Swift">
 +
class DetailViewController: UIViewController {
 +
 +
    var selectedItem: String?
 +
 +
    // ...
 +
 +
    override func viewDidLoad() {
 +
        super.viewDidLoad()
 +
        label.text = selectedItem
 +
    }
 +
}
 +
</syntaxhighlight>
 +
 +
In diesem Beispiel gibt es zwei ViewController: SourceViewController und DetailViewController. Der SourceViewController enthält ein Property selectedItem, das den Wert enthält, den Sie an den DetailViewController übergeben möchten.
 +
 +
In der prepare(for:sender:)-Funktion des SourceViewController wird überprüft, ob der angegebene Segue den richtigen Identifier hat. Wenn dies der Fall ist, wird der DetailViewController als Ziel des Segues typisiert und der Wert von selectedItem wird dem entsprechenden Property des DetailViewController zugewiesen.
 +
 +
Im DetailViewController wird der Wert von selectedItem in der viewDidLoad()-Funktion angezeigt. Dazu wird der Text des label-Elements auf den Wert von selectedItem gesetzt.

Version vom 4. Januar 2023, 20:35 Uhr

Links

UIKit Framework

View programmatisch erstellen

So kann man einen Screen nur mit Code erstellen und diesen vom Hauptview aus aufrufen. Das Beispiel dient zur veranschaulichung und zum Verständnis. In der Praxis kann man sich die Arbeit stark erleichtern.

SecondViewController.swift

import UIKit

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .red //Shortcut for UIColor.red
        
        let label = UILabel()
        label.text = "Hello"
        label.frame = CGRect(x: 0, y: 0, width: 100, height: 50)

        // add the label to the view. addSubview needs a view as param. As UILabel inherits from UIView it's possible
        view.addSubview(label) 
        
    }
}

ViewController.swift

//...
    @IBAction func calculatePressed(_ sender: UIButton) {
        let height = round(100 * heightSlider.value)/100
        let weight = round(weightSlider.value)
        let bmi = Int( weight / pow(height,2) )
        
        // show result on SecondViewController
        let secondVC = SecondViewController()
        secondVC.bmiValue = String(format: "%d", bmi)
        self.present(secondVC, animated: true, completion: nil)
    }
//...

Segue für mehrere Views einsetzen

Hier ist ein Beispiel, wie Sie in der prepare(for:sender:)-Funktion einen Wert setzen und ihn im Zielview anzeigen könnten:

class SourceViewController: UIViewController {

    var selectedItem: String?

    // ...

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showDetail" {
            let destination = segue.destination as! DetailViewController
            destination.selectedItem = selectedItem
        }
    }
}
class DetailViewController: UIViewController {

    var selectedItem: String?

    // ...

    override func viewDidLoad() {
        super.viewDidLoad()
        label.text = selectedItem
    }
}

In diesem Beispiel gibt es zwei ViewController: SourceViewController und DetailViewController. Der SourceViewController enthält ein Property selectedItem, das den Wert enthält, den Sie an den DetailViewController übergeben möchten.

In der prepare(for:sender:)-Funktion des SourceViewController wird überprüft, ob der angegebene Segue den richtigen Identifier hat. Wenn dies der Fall ist, wird der DetailViewController als Ziel des Segues typisiert und der Wert von selectedItem wird dem entsprechenden Property des DetailViewController zugewiesen.

Im DetailViewController wird der Wert von selectedItem in der viewDidLoad()-Funktion angezeigt. Dazu wird der Text des label-Elements auf den Wert von selectedItem gesetzt.