UIKit Framework - Snippets

Aus Wikizone
Version vom 4. Januar 2023, 21:05 Uhr von 134.3.86.14 (Diskussion) (→‎Dismiss View)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Links[Bearbeiten]

UIKit Framework

View programmatisch erstellen[Bearbeiten]

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[Bearbeiten]

Mit einem Segue kannst du Übergange von Storyboards festlegen und später programmatisch aufrufen.

   Von einem ViewController mit control zum anderen ziehen (entweder in den Ansichten (gelber Bobbel) oder im Sideview.
   Art auswählen
   Identifier vergeben (Property Panel)

Sie können Sie die prepare(for:sender:)-Funktion verwenden, um Daten an den ZielviewController eines Segues zu übergeben. Diese Funktion wird automatisch von der App aufgerufen, wenn ein Segue ausgelöst wird.

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.

Dismiss View[Bearbeiten]

Da der neue View einfach über dem alten liegt, kann man einfach den neuen mit dismiss wieder entfernen.

    @IBAction func backButtonPressed(_ sender: UIButton) {
        print("back pressed")
        self.dismiss(animated: true, completion: nil)
    }