Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 Hello iPhone
2 Grundlagen
3 Views und Viewcontroller
4 Alles unter Kontrolle
5 Daten, Tabellen und Controller
6 Models, Layer, Animationen
7 Programmieren, aber sicher
8 Datenserialisierung und Internetzugriff
9 Jahrmarkt der Nützlichkeiten
A Sicherer Entwicklungszyklus
Stichwort

Download:
- ZIP, ca. 49,9 MB
Buch bestellen
Ihre Meinung?

Spacer
Apps programmieren für iPhone und iPad von Klaus M. Rodewig, Clemens Wagner
Das umfassende Handbuch
Buch: Apps programmieren für iPhone und iPad

Apps programmieren für iPhone und iPad
Galileo Computing
1000 S., geb., mit DVD
39,90 Euro, ISBN 978-3-8362-1915-0
Pfeil 4 Alles unter Kontrolle
Pfeil 4.1 Viewcontroller, XIBs und Storyboards
Pfeil 4.1.1 Erstellung von Viewcontrollern über XIB-Dateien
Pfeil 4.1.2 Applikationsinitialisierung
Pfeil 4.1.3 Storyboards
Pfeil 4.1.4 Modale Dialoge
Pfeil 4.1.5 Pop-over
Pfeil 4.1.6 Übergänge
Pfeil 4.2 Der Navigationcontroller
Pfeil 4.2.1 Viewcontroller anzeigen und entfernen
Pfeil 4.2.2 Die Navigationsleiste
Pfeil 4.2.3 Der Zurückbutton
Pfeil 4.2.4 Gehe drei Felder zurück
Pfeil 4.2.5 Die Werkzeugleiste
Pfeil 4.2.6 Navigations- und Werkzeugleisten gestalten
Pfeil 4.3 Navigation- und Pop-over-Controller in der Praxis
Pfeil 4.3.1 Navigationcontroller anlegen
Pfeil 4.3.2 Einen Dialog für die Einstellungen gestalten
Pfeil 4.3.3 Einstellungen dauerhaft speichern
Pfeil 4.3.4 Anpassung an das iPad
Pfeil 4.4 Der Splitviewcontroller
Pfeil 4.4.1 Das Splitviewcontroller-Delegate
Pfeil 4.4.2 Ein praktisches Beispiel
Pfeil 4.4.3 Anpassung des Rotationsverhaltens
Pfeil 4.5 Der Tabbarcontroller
Pfeil 4.5.1 Aufbau einer Reiternavigation
Pfeil 4.5.2 Plaketten
Pfeil 4.5.3 Für ein paar Controller mehr
Pfeil 4.5.4 Der Tabbarcontroller im Storyboard
Pfeil 4.5.5 Die Gestaltungsmöglichkeiten für die Tabbar unter iOS 5
Pfeil 4.6 Der Pageviewcontroller
Pfeil 4.6.1 Einen Pageviewcontroller erzeugen
Pfeil 4.6.2 Die Datenquelle und das Delegate
Pfeil 4.7 Eigene Container- und Subviewcontroller
Pfeil 4.7.1 Container- und Subviewcontroller
Pfeil 4.7.2 Eigene Subviewcontroller
Pfeil 4.7.3 Eigene Delegate-Protokolle erstellen
Pfeil 4.7.4 Delegate-Protokolle erweitern
Pfeil 4.8 Regelbasierte Anpassung der Oberfläche
Pfeil 4.8.1 Gestaltungsregeln ...
Pfeil 4.8.2 ... und Gestaltungsmöglichkeiten

Galileo Computing - Zum Seitenanfang

4.8 Regelbasierte Anpassung der OberflächeZur nächsten Überschrift

Icon

Mit iOS 5 hat Apple auch neue Gestaltungsmöglichkeiten für die Oberflächenelemente eingeführt. Sie können jetzt bei der Navigations- und Werkzeugleiste nicht nur die Hintergrundfarbe, sondern auch die Farben der Buttons selbst festlegen. Dazu stellt der Attributinspektor für diese Buttons im Interface Builder eine Farbauswahl unter dem Punkt Tint bereit. Außerdem gibt es eine Reihe weiterer neuer Methoden.


Galileo Computing - Zum Seitenanfang

4.8.1 Gestaltungsregeln ...Zur nächsten ÜberschriftZur vorigen Überschrift

Neben den Möglichkeiten, die Oberfläche über direkte Anpassungen an den Views zu gestalten, bietet iOS 5 auch die Alternative, Regeln dafür festzulegen. Bisher haben Sie das Aussehen eines Views entweder über den Interface Builder und dessen Propertys beziehungsweise Methoden festgelegt. Mit diesem Vorgehen können Sie indes immer nur einen View auf einmal ändern. Bei der regelbasierten Oberflächengestaltung geben Sie, wie der Name schon vermuten lässt, Regeln an, um die Eigenschaften der Oberflächenelemente festzulegen.

Der Aufbau einer solchen Regel ist einfach und erfolgt über die Klasse, für die eine Einstellung gelten soll. Dabei können Sie die Einstellungen noch auf die Klassen der Superviews einschränken. Dieses System ist trotz seines simplen Aufbaus relativ mächtig. Das folgende Beispiel veranschaulicht dieses Regelsystem anhand einiger umgangssprachlicher Regeln:

  1. Alle Labels haben eine graue Schriftfarbe.
  2. Die Buttons in einer Navigationsleiste sind rot.
  3. Die Labels in einem Tableview sind blau, sofern sie nicht in einer Zelle liegen.

Diese Regel lassen sich folgendermaßen umsetzen:

// Alle Labels haben eine graue Schriftfarbe
[[UILabel appearance] setTextColor:[UIColor darkGrayColor]];
// Die Buttons in einer Navigationsleiste sind rot.
[[UIBarButtonItem appearanceWhenContainedIn:
[UINavigationBar class], nil]
setTintColor:[UIColor redColor]];
// Die Labels in einem Tableview sind blau, sofern sie nicht
// in einer Zelle liegen.
[[UILabel appearanceWhenContainedIn:[UITableView class], nil]
setTextColor:[UIColor blueColor]];
[[UILabel appearanceWhenContainedIn:
[UITableViewCell class], [UITableView class], nil]
setTextColor:[UIColor darkGrayColor]];

Listing 4.63 Regeldefinitionen für die Oberflächengestaltung

Die Definition der Regeln erfolgt also über die Klassenmethoden appearance und appearanceWhenContainedIn:. Diese beiden Methoden liefern jeweils ein Objekt zurück, bei dem Sie die Einstellungen vornehmen, die Sie auch bei dem entsprechenden View anwenden würden. Das Objekt nimmt den Methodenaufruf entgegen und sorgt für die Konfiguration der jeweiligen Views. Objekte, die Methodenaufrufe für andere Objekte entgegennehmen, nennt man auch Proxys. Für die erste Beispielregel greift die erste Anweisung in Listing 4.63 auf ein Proxy für Labels zu, bei dem es die Textfarbe setzt.

Die zweite Regel beschreibt die Farbe der Buttons in einer Navigationsleiste. Sie ist komplexer als die erste Regel, da sie nicht nur die Klasse der Zielobjekte enthält, sondern auch die Einschränkung, dass sich diese Objekte in einer Navigationsleiste befinden müssen. Diese Regel lässt sich über die Methode appearanceWhenContainedIn: beschreiben. Dabei gibt der Parameter eine Klasse an, in deren Views sich die Objekte befinden müssen, damit die Regel greift. Die zweite Anweisung in Listing 4.63 greift also auf ein Proxyobjekt für Buttons zu, das auf Navigationsleisten eingeschränkt ist.

Die dritte Beispielregel hat gegenüber der zweiten eine weitere Komplexitätsstufe, da sie auch die Einschränkung einschränkt. Regeln dieser Art lassen sich nur durch mehrere Anweisungen formulieren, indem Sie erst die Einschränkung und danach deren Einschränkungen beschreiben. Deshalb setzt die vorletzte Anweisung in Listing 4.63 die Textfarbe aller Labels auf blau, und die letzte Anweisung ersetzt diese Regel innerhalb von Tabellenzellen durch eine neue Regel. Bei dieser Regel geben Sie zwei Klassen in der Parameterliste an, die die Hierarchie der Views widerspiegeln. Sie können aus der Anweisung direkt die umgangssprachliche Regel herleiten, indem Sie die Klassennamen folgendermaßen von links nach rechts lesen: Die Regel betrifft alle UILabels, die in einer UITableViewCell liegen, die in einem UITableView liegt.

Wenn Sie die Angabe der Klasse UITableView aus der letzten Anweisung weglassen, funktioniert sie übrigens nicht mehr, und auch die Labels in den Zellen haben eine blaue Schrift. Das liegt daran, dass für Cocoa Touch die Regeln der beiden Anweisungen gleichwertig sind. Durch die zusätzliche Klassenangabe spezialisieren Sie die Regel in der letzten Anweisung stärker gegenüber der Regel in der vorletzten Anweisung.

Regeln zu Regeln

Für die Formulierung von Regeln gibt es ein paar Regeln:

Speziellere Regeln haben Vorrang vor einfacheren Regeln. Cocoa Touch wendet bei mehreren möglichen Regeln immer diejenige an, die die Klassen der Viewhierarchie am genauesten beschreibt.Die Reihenfolge der Anweisungen, mit denen Sie Regeln definieren, hat keine Auswirkung auf deren Anwendung. Sie können also die Reihenfolge der Anweisungen in Listing 4.63 beliebig verändern. Das Ergebnis bleibt gleich.

Wenn Sie sich schon mal mit der Webseitengestaltung über CSS-Anweisungen beschäftigt haben, kommt Ihnen dieses Konzept vielleicht bekannt vor. Auch dort beschreiben Sie das Aussehen der Elemente über Regeln, wobei speziellere Regeln einfachere überschreiben. Das Beispiel lässt sich wie in Listing 4.64 in HTML und CSS abbilden.

<html>
<head>
<style>
.label { color: #444444; }
.tableview .label { color: #0000FF; }
.tableview .cell .label { color: #444444; }
</style>
</head>
<body>
<label class="label">Label</label>
<div class="tableview">
<label class="label">Label in Tableview</label>
<div class="cell">
<label class="label">Label in Tableviewcell</label>
</div>
</div>
</body>
</html>

Listing 4.64 HTML-Seitengestaltung über CSS-Regeln

Die CSS-Regeldefinitionen befinden sich im style-Tag am Anfang des Listings. Bei diesen Definitionen müssen Sie die Klassen vor einer öffnenden, geschweiften Klammer jeweils von rechts nach links lesen. Die dritte Regel betrifft also alle Elemente mit der Klasse label, die sich in einem Element mit der Klasse cell befinden, die sich wiederum in einem Element mit der Klasse tableview befindet.


Galileo Computing - Zum Seitenanfang

4.8.2 ... und GestaltungsmöglichkeitenZur vorigen Überschrift

Den Code aus Listing 4.63 finden Sie in der Methode application:didFinishLaunchingWithOptions: der Wecker-App in der Version für iOS 5 mit Storyboard. Durch diese Anweisungen sind beispielsweise die Abschnittsüberschriften im Einstellungsdialog blau. Die Farbe dieser Elemente können Sie allerdings nicht über den Interface Builder setzen, und so erlaubt Ihnen die regelbasierte Oberflächengestaltung die Anpassung von Elementen, auf die Sie keinen direkten Zugriff haben. Das kann ein Segen sein, wie bei den Abschnittsüberschriften. Andererseits führen die Regeln manchmal auch zu unerwünschten Änderungen. In der Beispiel-App ist der Text eines oder beider nicht ausgewählten Segmente in der Zeiteinteilungsauswahl jetzt grau. Es kann also passieren, dass Sie durch die Regeln auch Elemente verändern, die Sie nicht verändern wollten.

Die Beispiele haben bislang nur die Farbe von Elementen verändert. Sie können indes nahezu beliebige Einstellungen der Views damit verändern. Die Methoden zum Lesen und Schreiben der Einstellung müssen dabei nur einen festen Aufbau haben. Dabei kann die eigentliche Einstellung laut Dokumentation einen der folgenden Typen haben: id oder eine Klasse, NSInteger, NSUInteger, CGFloat, CGPoint, CGSize, CGRect, UIEdgeInsets oder UIOffset. Die Accessoren auf diese Einstellungen dürfen auch noch weitere Parameter entgegennehmen, wenn diese ganze Zahlen sind. Hierzu ein paar Beispiele:

  • Die Propertys backgroundColor, textColor, tintColor, image und backgroundImage können Sie verwenden, weil der Typ dieser Einstellungen jeweils eine Klasse ist. Sie können auch die Propertys textAlignment, bounds, frame, lineBreakMode über Regeln setzen, weil deren Typen in der Liste oben auftreten. Die Ganzzahltypen NSInteger und NSUInteger decken dabei übrigens auch Aufzählungstypen wie UITextAlignment ab.
  • Die zustandsabhängigen Eigenschaften eines Buttons wie beispielsweise setTitleColor:(UIColor*)forState:(UIControlState) lassen sich auch über Regeln setzen, da der Typ des ersten Parameters eine Klasse und der Typ des zweiten Parameters ein Aufzählungs- also ein Ganzzahltyp ist. Sie können auch die Methode setBackgroundImage:(UIImage*)forState:(UIControlState)barMetrics:(UIBarMetrics) verwenden, da auch hier der erste Parametertyp eine Klasse ist und alle weiteren Parameter Ganzzahltypen haben.
  • Ein Gegenbeispiel sind die Property transform und die Methode setFinishedSelectedImage:(UIImage*)withFinishedUnselectedImage:(UIImage*) der Klasse UITabBarItem. Die Property scheidet aus, weil sie die C-Struktur CGAffineTransform als Typ hat, den die obige Liste nicht enthält. Bei der Methode ist der Typ des zweiten Parameters ebenfalls eine Klasse und kein Ganzzahltyp, weswegen Sie sie nicht verwenden dürfen.

Diese Beispiele sind sehr unvollständig. Sie können über zwei Verfahren ermitteln, ob sich eine Eigenschaft über Regeln anpassen lässt. Zum einen können Sie sich die Deklaration der Property beziehungsweise der Methode in der Headerdatei ansehen. Das geht am einfachsten, wenn Sie mit der Maus auf den Namen klicken und dabei die Taste cmd drücken. Dann springt Xcode zur Deklaration des angeklickten Symbols. Alle Propertys oder Methoden, die sich über Regeln konfigurieren lassen, enthalten das Makro UI_APPEARANCE_SELECTOR am Ende. Allerdings können Sie aus dem Fehlen des Makros nicht darauf schließen, dass diese Einstellung sich nicht über Regeln setzen lässt.

Aus diesem Grund gibt es noch ein weiteres, zuverlässigeres Verfahren. Probieren Sie es aus, indem Sie eine entsprechende Anweisung in Ihren Code einfügen. Entweder akzeptiert Cocoa Touch den Aufruf oder das Programm stürzt mit der Meldung

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** Illegal property type, XXX in invocation selector, YYY'

ab.

Sie können über Regeln sogar die Einstellungen Ihrer eigenen Klassen verändern. Beispiel: Die Farbe des Ziffernblattes der Wecker-App soll sich in der Version für iOS 5 über die Property dialColor von außen setzen lassen. Dazu fügen Sie in den Header der Klasse ClockView die Property-Deklaration

@property (nonatomic, strong) UIColor *dialColor;

ein und in den Implementierungsteil die entsprechende Synthetisierung:

@synthesize dialColor;

Außerdem müssen Sie den Anfang der drawRect:-Methode ändern. Dort ersetzen Sie den bisherigen Funktionsaufruf zum Setzen der Füllfarbe durch den Aufruf der Methode setFill bei der neuen Property. setFill legt die Füllfarbe im aktuellen Grafikkontext fest. Listing 4.65 zeigt den Ausschnitt aus der Methode, der dazu geändert wurde:

CGContextSaveGState(theContext);
[self.dialColor setFill];

CGContextAddEllipseInRect(theContext, theBounds);
CGContextFillPath(theContext);

Listing 4.65 Setzen der Ziffernblattfarbe über eine Property

Wenn Sie nun die Wecker-App starten, zeigt sie ein schwarzes Ziffernblatt mit grauer Beschriftung. Das liegt daran, dass Sie noch keine Füllfarbe festgelegt haben. Fügen Sie nun in die Methode application:didFinishLaunchingWithOptions: des App-Delegates die Anweisung

[[ClockView appearance] setDialColor:[UIColor whiteColor]];

ein, und importieren Sie dort auch die Headerdatei ClockView.h des Ziffernblattes, um Übersetzungsfehler zu vermeiden. Durch diese Änderung zeigt der Wecker wieder ein weißes Ziffernblatt an.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.







<< zurück
  Zum Katalog
Zum Katalog: Apps programmieren für iPhone und iPad

Apps programmieren für iPhone und iPad
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Einstieg in Objective-C 2.0 und Cocoa





 Einstieg in
 Objective-C 2.0
 und Cocoa


Zum Katalog: Apps entwickeln für iPhone und iPad - Videotraining






 Apps entwickeln für
 iPhone und iPad -
 Videotraining


Zum Katalog: Apps mit HTML5 und CSS3






 Apps mit HTML5
 und CSS3


Zum Katalog: iPhone- und iPad-Apps entwickeln






 iPhone- und
 iPad-Apps entwickeln


Zum Katalog: Android 4






 Android 4


Zum Katalog: Android-Apps entwickeln - Videotraining






 Android-Apps
 entwickeln -
 Videotraining


Zum Katalog: Windows Store Apps mit XAML und C#






 Windows Store Apps
 mit XAML und C#


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de