92 3 Grundlagen einer ios-anwendung 3.8.4 Target-Actions Einer der häufigsten Anwendungsfälle bei einer Oberfläche ist das Betätigen einer Schaltfläche durch einen Anwender, woraufhin eine bestimmte Aktion (z.b. Öffnen einer bestimmten Webseite) ausgeführt werden soll. Das heißt, auch hier muss eine Kommunikation zwischen Objekten stattfinden. Die bisher gezeigten Möglichkeiten sind dafür nicht unbedingt geeignet. Der empfohlene Weg in Cocoa ist der sogenannte Target-Action-Mechanismus. Das Ziel (Target) ist in diesem Zusammenhang der Empfänger der Nachricht (die Action). Dieses Ziel ist als Outlet im Oberflächenelement gespeichert. Die Nachricht wird vom Element zum Target gesendet. Actions können dabei unterschiedliche Signaturen haben. Auch hier werden Sie häufig mit dem Interface Builder arbeiten, und somit gibt es auch hierfür eine Markierung, nämlich IBAction. Der Rückgabewert wird programmatisch ermittelt. Nachfolgend ist die beispielhafte Definition einer Action aus dem Beispielprojekt sample-ui angegeben: - (IBAction)click:(id)sender; Der Vollständigkeit halber soll auch die ausimplementierte Action gezeigt werden: - (IBAction)click:(id)sender { [label settext:[textfield text]]; } Wie Sie am obigen Beispiel sehen, erfolgt der Zugriff auf die einzelnen Oberflächenelemente über die in der Header-Datei definierten Outlets. 3.9 Grundelemente einer Benutzeroberfläche Die Interaktion mit einer App geschieht über deren Benutzeroberfläche. Auf dieser Benutzeroberfläche werden Informationen in unterschiedlichen Ansichten (Views genannt) dargestellt, Apps mit wenigen Informationen kommen auch mit einer Ansicht aus. Abhängig vom Status der App müssen gewisse Informationen sichtbar werden und andere sollen für den Benutzer unsichtbar sein. Die Basismechanismen für die Darstellung der unterschiedlichen Informationen in unterschiedlichen Ansichten werden von View Controllern zur Verfügung gestellt. Für das weitere Verständnis sollen drei wichtige Klassen, im Zusammenhang mit Benutzeroberflächen für das ios, kurz erläutert werden: 71. First In, First Out d.h., die erste Nachricht, die an das Notification Center gesendet wird, wird auch zuerst abgearbeitet.
3.9 Grundelemente einer Benutzeroberfläche 93 UIScreen UIWindow UIView Die Klasse UIScreen repräsentiert den physikalischen Bildschirm des Gerätes, auf dem die App läuft. Die Klasse UIWindow stellt Basisfunktionen für die Darstellung auf dem Bildschirm bereit. Die eigentliche Darstellung übernimmt die Klasse UIView. 3.9.1 Window oder View Bei der Erstellung einer Oberfläche für das ios werden Sie sehr schnell mit den schon erwähnten Begriffen Window und View in Berührung kommen. Diese Begriffe sind nicht nur dem ios zu eigen, sondern finden sich in allen Frameworks zur Oberflächenerstellung wieder, wo sie allerdings häufig mit unterschiedlichen Bedeutungen behaftet sind. Sowohl Windows als auch Views sind die visuellen Komponenten zur Gestaltung der Oberfläche. Eine erste Trennlinie zwischen Window und View kann man dadurch ziehen, dass ein Window eher für die Bereitstellung der grafischen Plattform verantwortlich ist und eine View für das Zeichnen der Elemente. Ein Window könnte man somit im weitesten Sinne als das Backend unter den Oberflächenelementen bezeichnen. 3.9.2 Window Eine Anwendung für das ios hat typischerweise nur ein Window vom Typ UIWindow. Zum Startzeitpunkt wird diese Instanz erzeugt (sie kann auch aus der Oberflächendefinitionsdatei stammen) und eine oder mehrere Views werden zu dieser Instanz hinzugefügt. Ein Window im ios hat keine besonderen Oberflächenmerkmale wie z.b. eine Titelzeile. Das ios verwendet dieses Window auch für die Übergabe der Events an die Anwendung. Ein interessantes Detail ist, dass UIWindow sich von der Klasse UIView ableitet und somit eigentlich auch eine View ist. Verwenden Sie nicht mehr als ein UIWindow Es ist zwar möglich, mehrere Elemente vom Typ UIWindow übereinander zu lagern (Layer), aber es empfiehlt sich doch, dafür die Views aus dem UIKit zu verwenden. Das System selbst verwendet zwar UIWindow noch für Elemente wie die Systemstatusleiste oder wichtige Meldungen. Sie sollten aber trotzdem auf die angebotenen Views des UIKit zurückgreifen.
94 3 Grundlagen einer ios-anwendung 3.9.3 View Eine View innerhalb von ios ist vom Typ UIView. Views sind zum einen wichtig für die Darstellung der einzelnen Oberflächenelemente, zum anderen aber auch für die Reaktion auf die Benutzereingaben. Neben diesen beiden wichtigen Funktionen kann eine View darüber hinaus noch weitere Views enthalten, sogenannte Subviews. Eine Subview ist dann lediglich eine View, die in einer anderen View (genannt Parent View oder Superview) eingebettet ist. Hierdurch entsteht die bereits erwähnte View-Hierarchie (siehe auch Abschnitt 3.5.3). Beim Anordnen der Elemente ist darauf zu achten, dass jede Subview über der eigentlichen Parent View platziert wird. Da Views das hauptsächliche Element zur Interaktion mit der Anwendung sind, fallen einer View folgende Aufgaben zu: Darstellung (Zeichnen der Elemente) und Animation Layout (Positionierung) und Management der Subviews Behandlung der Events (Aufnahme und Weiterleitung) 3.9.4 View Controller Wie zuvor schon bei der Beschreibung des MVC-Patterns erwähnt, existiert auch das Prinzip des View Controller, sozusagen ein Controller, der auch View-Aufgaben übernimmt. Eine größere Anwendung wird häufig in mehrere Masken (in der Dokumentation auch als screens bezeichnet) aufgeteilt. Jede einzelne dieser Masken besteht wiederum aus einem Satz von View-Objekten zur Darstellung der Daten. Die Views für eine einzelne Maske werden von einem View Controller gehalten. In dessen Verantwortung liegt es, die Daten für die Views bereitzustellen und die Views für die Maske im Bedarfsfall zu aktualisieren. Grundsätzlich können View Controller in flogende zwei Kategorien aufgeteilt werden: Content View Controller Container View Controller
3.9 Grundelemente einer Benutzeroberfläche 95 Die Aufgabe eines Content View Controller (siehe Abb. 3 13) ist die Darstellung von Oberflächenelementen mithilfe von Views. Diese Views können in Gruppen aufgeteilt sein. Content View Controller Abb. 3 13 Schematische Darstellung eines Content View Controller Ein Container View Controller enthält andere View Controller und verwaltet diese. Damit entsteht eine View-Controller-Hierachie (siehe Abb. 3 14). Container View Controller Abb. 3 14 Schematische Darstellung eines Container View Controller Die Basisklasse für einen View Controller ist UIViewController. Zusätzlich zu dieser Klasse existieren weitere Unterklassen für View Controller, die wichtigsten davon sind: UINavigationController UIPageViewController UISplitViewController UIPopoverController UITabBarController UITableViewController Da diese Klassen häufig zum Einsatz kommen, soll deren Bedeutung und Einsatzzweck kurz beschrieben werden. Die Klasse UIViewController ist die Basisklasse für alle eingesetzten View Controller. Eigene View Controller sollten auch von dieser Klasse oder einer Unterklasse davon ableiten. UIViewController
96 3 Grundlagen einer ios-anwendung UINavigationController Die Klasse UINavigationController repräsentiert einen Navigation Controller. Solch ein Controller organisiert hierarchisch strukturierte Daten. Ein Beispiel hierfür ist das Adressbuch (siehe Abb. 3 15). Die erste View zeigt eine Liste von Kontakten an. Hier kann wiederum ein Kontakt ausgewählt werden. Diese zwei Views werden von einem Navigation Controller verwaltet. In diesem Fall ist der Navigation Controller ein Container View Controller, der drei Content View Controller verwaltet. Abb. 3 15 Navigation Controller beim Adressbuch UIPageViewController UISplitViewController UIPopoverController UITabBarController Die Klasse UIPageViewController repräsentiert einen Page View Controller. Dieser View Controller fällt unter die Klasse der Container View Controller. Das Umschalten zwischen den Seiten ist dem Umblättern einer Buchseite nachempfunden. Jede Seite ist dabei als Content View Controller realisiert. Der Page View Controller ist für die Steuerung der Übergänge zwischen den einzelnen Seiten verantwortlich. Die Klasse UISplitViewController repräsentiert einen Split View Controller. Eine Split View teilt den vorhandenen Bildschirm in zwei Teile auf. Diese Ansicht kommt häufig bei Master-Detail-Ansichten zum Einsatz. Die beiden Views werden durch zwei View Controller dargestellt. Der Split View Controller steht nur für das ipad zur Verfügung. Die Klasse UIPopoverController repräsentiert einen Popover Controller. Wenn eine Split View im Hochformat (Portrait-Modus) angezeigt wird, werden die beiden Views nicht nebeneinander abgebildet, sondern die linke View wird als Popover angezeigt. Dies ist eine überlagerte View. Die Klasse UITabBarController repräsentiert einen Tab Bar Controller. Hierbei handelt es sich um einen Container View Controller mit
3.10 Game Center 97 dessen Hilfe die App in mehrere Bereiche aufgeteilt wird. Der Ansprung erfolgt über die Tabs der Tab Bar. Die Klasse UITableViewController repräsentiert einen Table View Controller. Dieser View Controller kontrolliert eine View mit einer Tabelle. Einen tieferen Einstieg in die Thematik View Controller bietet auch der View Controller Programming Guide for ios 72. UITableViewController Zugänglichkeit ein wichtiges Thema Ein sehr wichtiges Thema ist die Zugänglichkeit/Barrierefreiheit von Anwendungen. Hier bietet das ios ebenfalls Unterstützung an: Neben Funktionen wie Zoom, Mono Audio und Voice Control (Steuerung der Funktionen per Stimmeingabe) kam mit dem iphone OS 3.0 auch ein Screenreader mit dem Namen VoiceOver hinzu. Weitergehende Informationen dazu können Sie dem Accessibility Programming Guide for ios entnehmen (http://developer.apple.com/library/ ios/#documentation/userexperience/conceptual/iphoneaccessibility/introduction/introduction.html). 3.10 Game Center Entwickler kennen das Game Center bereits aus ios 4, wo sie es in einer Betavariante verwenden konnten. Mit dem ios 4.1 wurde das Game Center für die Allgemeinheit offengelegt, d.h., seither gibt es für Benutzer eine eigene App, die Game Center App, die auch ein eigenes Icon auf dem Homescreen besitzt. Außerdem steht die Game Center App im iphone Simulator zur Verfügung (Abb. 3 16). Abb. 3 16 Das Icon der Game Center App im iphone Simulator Das Game Center stellt eine Erweiterung für das Game Kit Framework dar und bietet zusätzliche Funktionen für Spieleprogrammierer, die wir uns im Folgenden anschauen. Drei voneinander unabhängige Basisdienste stellen das Fundament des Game Center dar: Ein zentraler Netzwerkdienst bietet Funktionen, die von anderen Spielen genutzt werden können. Über Peer-to-Peer können Geräte über Bluetooth oder ein lokales WLAN als Ad-hoc- Basisdienste 72. https://developer.apple.com/library/ios/#featuredarticles/viewcontrollerpgforiphoneos