Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp09/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2009 - Gruppe 1 - Iphone-ui

User Interface

Aufbau

Die Hauptnavigation des Spieles besteht aus einer Tableiste am unteren Bildrand. Von dort kommt man direkt zu den 5 wichtigsten Menüpunkten: Home, Galaxie, Flottenbewegungen, Technologie und Messages. Die Informtionen werden überwiegend in Tabellenform angezeigt.

UIViewController und Delegates

Die iPhone-Technologie trennt die Darstellung einer View in einen Viewcontroller und verschiedene Delegateklassen, dies wird verdeutlicht am Bespiels der UITableView.
Das iPhone interne Format für eine Anzeige ist ein Objekt von Typ UIView.
Mit der Klasse UIViewController wird mittels des Konstruktors initWithNibName ein UIViewController-Objekt aus einem serialisierten Objekt geladen. Dieses enthält als Instanzvariable ein UIView-Objekt, in diesem Fall von Typ UITableView.
Immer wenn diese angezeigt wird, wird die Methode ViewWillAppear aufgerufen, in der die Internen Daten mit Hilfe der Methode updateAll aktualisiert werden. Diese Methode benutzt die Kommunikationsschnittstelle DataController um die aktuellen Daten aus der Datenbank auszulesen.

- (void)viewWillAppear:(BOOL)animated{
	[super viewWillAppear:animated];
	[self updateAll];
}
 
- (void) updateAll{
	if(model) [model release];
	model = [DataController mySolar_systems];
	if(!model){
		UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Fehler" 
                message:@"Sie haben entweder falsche Login-Daten/Server-Daten eingetragen oder der Server
                antwortet nicht."delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
		[alert show];	
		[alert release];
	}
	else{
		[model retain];	
		[(UITableView*)self.view reloadData];
	}
}

Das UITableView Objekt benötigt für ihre Protokolle UITableViewDataSource und UITableViewDelegate je einen Verweis auf eine Klasse, die dieses Protokoll implementiert. Diese werden kurz als Delegate-Klassen bezeichnet.
Das DataSource Protokoll ist für den Inhalt der Tabelle zuständig, es liefert die Tabellenzellen mit gefüllten Inhalten, und auch die Struktur der Tabelle. Die Klasse DataSource besitzt mehrere Methoden, zB. numberOfSectionsInTableView, numberOfRowsInSection, cellForRowAtIndexPath.
Die Methode numberOfSectionsInTableView bekommt einen Integer übergeben und liefert ebenfalls einen Integer zurück. Diese Methode sagt aus wieviele Abschnitte die Tabelle haben soll.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 3;
}



Die Methode numberOfRowsInSection leifert die Anzahl der Zellen pro Abschnitt.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
	if (section == 0) return 1;
	else if (section == 2) return 3;
	else return 4;
 
}



Die wichtigste Methode ist die cellForRowAtIndexPath, welche den Inhalt der Zellen bestimmt. Dort wird ein neues Zellen Objekt erstellt und mit Inhalt gefüllt. Das iPhone bietet die Möglichkeit Zellen wiederzuverwenden.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 
	UITableViewCell *c; 
		if(((Message*)[model objectAtIndex:indexPath.row]).is_read){
			c= [tableView dequeueReusableCellWithIdentifier:@"unread"];
			if(c == nil){
				c = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"unread"];
			}
			c.backgroundColor = [UIColor blackColor];
			c.textLabel.textColor = [UIColor whiteColor];
			c.textLabel.text = [(Message*)[model objectAtIndex:indexPath.row] sender];
 
		c.detailTextLabel.textColor = [UIColor grayColor];
	}
	else{
		c= [tableView dequeueReusableCellWithIdentifier:@"read"];
		if(c == nil){c = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:@"read"];
		}
		c.backgroundColor = [UIColor blackColor];
		c.textLabel.textColor = [UIColor whiteColor];
		c.textLabel.text = [(Message*)[model objectAtIndex:indexPath.row] sender];
 
		c.detailTextLabel.textColor = [UIColor redColor];
	}
	c.detailTextLabel.text = [[model objectAtIndex:indexPath.row] subject];
	c.selectionStyle = UITableViewCellSelectionStyleGray;
	return c;
}



Für die Interaktion des Benutzers mit der Tabelle ist das Delegate Protokoll zuständig. Die Methode didSelectRowAtIndexPath wird aufgerufen sobald eien Zelle angeklickt wird. In diesem Beispiel wird je nach Abschnitt unterschieden welches Menü angezeigt werden soll.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
	[tableView deselectRowAtIndexPath:indexPath animated:YES];
	if(indexPath.section == 1){
		if(indexPath.row == 0){
                        //Allianzen gewählt, AllianzView wird geladen
			[tableView deselectRowAtIndexPath:indexPath animated:YES];
			Aliances *test = [[Aliances alloc] initWithNibName:@"Aliances" bundle:nil alliance:alli];
			[self.navigationController pushViewController:test animated:YES];
			[test release];
		}
	}	
	if(indexPath.section == 2){
		if(indexPath.row == 0){
			//Eigene Planeten gewählt, PlanetenView laden und anzeigen
                        [tableView deselectRowAtIndexPath:indexPath animated:YES];
                        [[tableView cellForRowAtIndexPath:indexPath] showActivity:YES];
                        [NSTimer scheduledTimerWithTimeInterval:0 target:self
                           selector:@selector(timerFireMethod:) userInfo:indexPath repeats:NO];
		}
	}		
}

Menü Führung

Home

Im Home Bildschirm werden die verfügbaren Ressourcen sowie Statistiken angezeigt. Gegebenfalls wird noch die Allianz angezeigt, in welcher man im Moment ist. Klickt man auf diesen Menüpunkt werden die genaueren Information zum Thema Allianzen angezeigt. Ein weiterer Punkt ist Eigene Planeten, wo man eine Übersicht der eigene Planeten bekommt.

Galaxie

Hier wird eine Übersicht der Sonnensysteme angegeben in welche man Planeten besitzt. Klickt man auf ein Sonnensystem werden alle darin befindlichen Planeten angezeigt. Klickt man dann auf einen eigenen Planeten, so bekommt man eine detaillierte Übersicht des Planten, ausserdem bekommt die Möglichkeit Schiffe bzw. Gebäude zu bauen. Schließlich kann man noch andere Sonnensysteme in der Nähe des Planeten erkunden und gegebenfalls fremde Planeten Angreifen, kolonisieren, ausspionieren oder dessen Bewohner eine Nachricht senden.

Flottenbewegung

Als erstes bekommt man eine Übersicht aller Flottenbewegungen an denen man beteiligt ist. Sollte man eine Flotte mit Hilfe des Buttons in der oberen Leiste losschicken so hat man die Möglichkeit zwischen 5 Missionen zu wählen(Angreifen, Kolonisieren, Spionieren, Transportund Rückflug, Flug zum eigenen Planeten). Anschliessend wählt man einen Start und Zielplaneten und stellt sich seine Flotte zusammen und schickt sie los.

Technologie

Das Technologiemenü zeigt alle verfügbaren Technologien zusammen mit den benötigten sowie aktuell vorhandenen Forschungspunkten an.

Messages

Im Message Bildschirm bekommt man alle eingegangenen Nachrichten mit Autor und Betreff angezeigt. Ungelesene Nachrichten werden rot hervorgehoben. Die Nachricht anzeigen kann man indem man auf sie klickt. Über den erstellen Button in der oberen Leiste hat man die Möglichkeit eine neue Nachricht zu verfassen und zu verschicken.


Page last modified on August 23, 2009, at 07:21 PM