Ergänzend zum letzten Artikel, in dem es um die grundlegende Konfiguration und Nutzung der neuen PhotosPicker-View ging, stelle ich euch an dieser Stelle vor, wie ihr mehrere Bilder mittels PhotosPicker auswählen und verarbeiten könnt. Die wichtigste und ausschlaggebende Änderung betrifft den selection-Parameter bei Initialisierung eines PhotosPickers. Um mehrere Bilder auswählen zu können, muss der Parameter einem Binding entsprechen, das auf ein Array von PhotosPickerItem-Instanzen verweist (statt auf ein Optional vom Typ PhotosPickerItem). Die vom Nutzer ausgewählten Bilder landen dann in jenem Array und lassen sich von dort aus weiter verarbeiten. Eine entsprechend simple Konfiguration eines PhotosPickers kann so aussehen wie…
Neuerungen der WWDC 2022 – Teil 5 Mit der neuen PhotosPicker-View steht uns jetzt ein natives SwiftUI-Element zur Verfügung, um auf die Foto-Library zugreifen und Bilder auswählen zu können. In diesem Artikel gehe ich auf die grundlegende Funktionsweise von PhotosPicker ein und zeige euch, wie ihr diese neue View nutzen könnt, um ein einzelnes Foto aus der Library auszuwählen und anzuzeigen. Grundlagen PhotosPicker nutzt eine Instanz vom Typ PhotosPickerItem, um die vom Nutzer gewählten Fotos abzubilden. Demnach braucht es ein Binding auf eine PhotosPickerItem-Instanz, die man PhotosPicker als Parameter übergibt. PhotosPicker füllt dieses Binding mit den Daten der vom Nutzer…
Welche es gibt und wie ich sie persönlich in Projekten einsetze Die Access Level in Swift steuern seit jeher die Berechtigungen, mit denen sich auf die Code-Fragmente eines Projekts zugreifen lässt. Access Level regeln so unter anderem, ob beispielsweise Properties nur innerhalb eines Typs angesprochen werden können oder auch direkt von Instanzen jenes Typs auslesbar sind. Das nachfolgende Listing skizziert einmal dieses Szenario: Die Eigenschaft name der Structure Person besitzt den Access Level internal. Innerhalb eines Projekts kann sie so problemlos von Instanzen der Structure angesprochen und ausgelesen werden. Anders verhält es sich mit address. address ist als private deklariert…
Bug oder Feature? Seit dem Release von Xcode 14.0 seid auch ihr möglicherweise auf jene Runtime-Warnung gestoßen, die den Titel dieses Artikels ziert. Es würde mich nicht wundern. Diese Meldung führt aktuell zu einiger Irritation innerhalb der Apple Developer-Community (siehe https://developer.apple.com/forums/thread/711899). Um diese Warnung zu erhalten, müsst ihr nicht allzu viel tun. Der folgende Code ist zu Demonstrationszwecken vollkommen ausreichend. Ihr seht darin eine als ObservableObject deklarierte Klasse Person mit einer Published-Property namens name. Abschließend folgt eine ContentView, die eine Person-Instanz als StateObject enthält und deren Namen einen Standardwert nach Betätigung eines Buttons zuweist. So weit, so gut – oder…
„Im Web suchen“ ist ein neues Feature in iOS 16. Es ermöglicht, in Textfeldern und Text-Views selektierten Text direkt an den Browser weiterzugeben und darüber zu suchen. Im Zuge eines Projekts kam die Frage auf, wie sich dieses Feature explizit deaktiveren lässt. Es sollte also verhindert werden, dass ein selektierter Text über die genannte Funktion einfach an den Browser weitergegeben werden kann. Unter UIKit existiert mit UIMenuBuilder ein Protokoll, über das sich solche Informationen recht flexibel steuern lassen. Dem zugrunde liegt die Methode buildMenu(with:) der UIResponder-Klasse. Diese Methode kann man überschreiben und über den als Parameter erhaltenen UIMenuBuilder festlegen, welche…
Type placeholders Mithilfe der sogenannten Type placeholder teilt man Swift mit, dass der Typ einer Variablen oder Konstanten mittels Type Inference automatisch ermittelt werden soll. Um einen Type placeholder zu setzen, nutzt man für die Typ-Angabe der gewünschten Variablen/Konstanten einen Unterstrich. Das nachfolgende Listing zeigt ein Beispiel zum Einsatz der Type placeholder. Die Konstante firstValue nutzt Type Inference auf die bekannte Art und Weise, weshalb Swift ihr den Typ Int zuweist. Gleiches geschieht auch bei secondValue, nur mit dem Unterschied, dass für die Deklaration der beschriebene Type placeholder zum Einsatz kommt. Swift leitet demnach den Typ für secondValue selbst via…
Neuerungen der WWDC 2022 – Teil 4 Mit Grid steht ein neues View-Element in SwiftUI zur Verfügung, das es erlaubt, beliebige Views in fixen Reihen und Spalten anzuordnen. Grid ist eine Container-View. Die ihr zugefügten Views werden als Reihen dargestellt. Soll eine Reihe über mehrere Spalten verfügen, nutzt man eine GridRow-Instanz. Auch hierbei handelt es sich um einen Container, der für jede Spalte innerhalb einer Reihe eine eigene View entgegennimmt. Ein simples Beispiel zum Einsatz eines Grids zeigt das nachfolgende Listing. Dieses Grid besteht aus drei Reihen mit jeweils zwei Spalten. Innerhalb eines Grids lassen sich neben GridRow– auch beliebige…
Neuerungen der WWDC 2022 – Teil 3 ViewThatFits ist eine neue Container-View in SwiftUI 4. Sie stellt die erste der ihr zugewiesenen Views dar, die aufgrund ihrer Größe in den zur Verfügung stehenden View-Bereich passt. Die Größe des View-Bereichs hängt hierbei von dynamischen Faktoren wie Bildschirmgröße und Platzierung innerhalb der bestehenden View-Hierarchie ab. Der nachfolgende Screenshot skizziert das Problem, das sich mithilfe von ViewThatFits elegant lösen lässt. Dort ist ein HStack mit verschiedenen Tags zu sehen. Im Querformat auf einem iPhone 13 Pro Max sieht das wunderbar aus, im Hochformat jedoch werden die Inhalte abgeschnitten. Die Lösung soll in diesem…
Neuerungen der WWDC 2022 – Teil 2 Textfelder auf Basis der TextField-View sind in SwiftUI bisher auf eine einzige Zeile beschränkt. Soll der Platz zur Eingabe von Text umfangreicher ausfallen, musste alternativ ein TextEditor herhalten. Das ändert sich nun mit SwiftUI 4. TextField verfügt dann über einen optionalen Parameter namens axis. Setzt man für den die Option vertical, vergrößert sich das zugrundeliegende Textfeld automatisch, sobald der Platz für den Inhalt nicht mehr für eine Zeile ausreicht. Generell vergrößert sich das Textfeld dann so weit, wie der umgebende Container es erlaubt. Auch Text mit drei Zeilen und mehr ist dann direkt…
Neuerungen der WWDC 2022 – Teil 1 Auf der WWDC 2022 stellte Apple wieder eine Vielzahl an Neuerungen für Swift, SwiftUI und Xcode vor. In dieser neuen Artikelreihe werde ich einige dieser neuen Features beleuchten und im Detail vorstellen. Beginnen möchte ich mit einem meiner Highlights: SwiftUI 4 ermöglicht es, die Größe von Sheets nun individuell anzupassen. Alles, was es dazu braucht, ist ein neuer Modifier namens presentationDetents(_:). presentationDetents(_:) erwartet ein Set von PresentationDetent-Instanzen. Bei PresentationDetent handelt es sich um eine Structure, mit deren Hilfe man die Größe eines Sheets definiert. Zu diesem Zweck stellt die Structure verschiedene Type Properties…