Skip to content
Files for my iPhone View Controllers session at WebTech 09
Objective-C
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
demo-files
iphone-viewcontrollers.oo3
README
demosteps.demoMonkey
iphone-viewcontrollers-presentation-short.key
iphone-viewcontrollers-presentation.key
presentation-notes.txt

README

# tabbar based app "ViewControllerDemo"
# WebDemo, DataController, WebDemosSimpleTableViewController und Resources reinkopieren
# FirstViewController loeschen
# SecondView.xib loeschen
# neuen TableViewController WebDemosTableViewController anlegen
# MainMenu.xib aufmachen
# TabBar Controller aufklappen und den FirstViewController rausloeschen
# Dann als erstes Item einen NavigationController reinziehen und dessen Controller Identitaet auf WebDemosTableViewController setzen
# Navigation Item Title auf "Web Demos" setzen
# Dem ersten Tabbar Item den Titel "Deluxe" und das picture frame icon zuweisen.
# den zweiten viewcontroller loeschen
# dafuer einen weiteren navigationviewcontroller reinziehen, viewcontroller class auf WebDemosSimpleTableViewController setzen
# aufklappen, nav item titel auch "web demos"
# Dem zweiten tabbar Item den Titel "Simple" und das text justify icon zuweisen.

# import DataController in WebDemosTableViewController

    // Customize the number of rows in the table view.
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [[DataController sharedInstance] numberOfWebDemos];
    }

    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    	static NSString *CellIdentifier = @"Cell";
    	WebDemo *webDemo = [[DataController sharedInstance] webDemoAtIndex:indexPath.row];

    	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    	if (cell == nil) {
    		cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    	}

    	// Configure the cell.

    	cell.textLabel.text = webDemo.name;

    	return cell;
    }


# laufen lassen

# image hinzufuegen:
cell.imageView.image = [UIImage imageNamed:webDemo.imageFileName];

# laufen lassen

# image ist etwas klein: groesser machen
viewDidLoad
self.tableView.rowHeight = 100;

/*

CGRect titleRect = CGRectMake(0, 0, 300, 40);
    UILabel *tableTitle = [[UILabel alloc] initWithFrame:titleRect];
    tableTitle.textColor = [UIColor blueColor];
    tableTitle.backgroundColor = [self.tableView backgroundColor];
    tableTitle.opaque = YES;
    tableTitle.font = [UIFont boldSystemFontOfSize:18];
    tableTitle.text = [curTrail objectForKey:@"Name"];
    self.tableView.tableHeaderView = tableTitle;
    [self.tableView reloadData];
    [tableTitle release];
*/

# laufen lassen

# beschreibung waere schoen. also cellForRowAtIndexPath -> initWithStyle:UITableViewCellStyleSubtitle und cell.detailTextLabel.text = [webDemo description];

# user zeigen, dass man auf die zellen tippen kann:
in (cell == nil)
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator

# laufen lassen

# Wie fangen wir ab, dass getippt wurde und worauf getippt wurde?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	WebDemo *webDemo = [[DataController sharedInstance] webDemoAtIndex:indexPath.row];
	NSLog(@"Ausgewaehlt: %@", webDemo.name);
}

xxxx

# File -> New -> New UIViewController with XIB ('WebDemoDisplayViewController')
# WebDemoDisplayViewController -> WebDemoDisplayView.xib
# WebDemoDisplayView.xib oeffnen, navbar + tabbar + uiwebview (+ iboutlet und connections)

# in WebDemosTableViewController #import "WebDemoDisplayViewController.h"

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	WebDemo *webDemo = [[DataController sharedInstance] webDemoAtIndex:indexPath.row];
	NSLog(@"Ausgewaehlt: %@", webDemo.name);

	WebDemoDisplayViewController *displayViewController = [[WebDemoDisplayViewController alloc] initWithWebDemo:webDemo];
	[self.navigationController pushViewController:displayViewController animated:YES];
	[displayViewController release];
}

# laufen lassen

# waere schoen, im titel zu sehen, wie das demo heisst. Also: in initWithWebDemo: self.title = webDemo.name;

# laufen lassen

# waere schoen, sich den sourcecode ansehen zu koennen, also File -> New -> New UIViewController with XIB ('WebDemoSourceViewController')
# WebDemoSourceViewController -> WebDemoSourceView.xib
# WebDemoSourceView.xib oeffnen, navbar + tabbar + uitextview (+ iboutlet und connections)
# textview -> non-editable
# im grunde inhalt vom displayview kopieren

# wie zeigen wir dem user jetzt, dass er entweder das gerenderte html oder den source sehen kann?
# im tableviewcontroller #import "WebDemoSourceViewController.h"
# cellForRowAtIndexPath: cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

und

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
	WebDemo *webDemo = [[DataController sharedInstance] webDemoAtIndex:indexPath.row];
	
	WebDemoSourceViewController *sourceViewController = [[WebDemoSourceViewController alloc] initWithWebDemo:webDemo];
	[self.navigationController pushViewController:sourceViewController animated:YES];
	[sourceViewController release];
}

# laufen lassen

# jetzt waere es doch schoen, die tabellen eintraege nach typ zu gruppieren (canvas/css)
# in WebDemosTableViewController:

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
	if (section == 0) {
		return [[DataController sharedInstance] numberOfCssWebDemos];
	} else {
		return [[DataController sharedInstance] numberOfCanvasWebDemos];
	}
}

@interface WebDemosTableViewController(PrivateMethods)
- (Webdemo *)webDemoForIndexPath:(NSIndexPath *)indexPath;
@end

- (WebDemo *)webDemoForIndexPath:(NSIndexPath *)indexPath {
	if (indexPath.section == 0) {
		return [[DataController sharedInstance] cssWebDemoAtIndex:indexPath.row];
	} else {
		return [[DataController sharedInstance] canvasWebDemoAtIndex:indexPath.row];
	}
}

//ueber all webDemo = mit dem hier ersetzen:
WebDemo *webDemo = [self webDemoForIndexPath:indexPath];

# laufen lassen (hmmm, kein veraenderung!)

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
	if (section == 0) {
		return @"CSS Transformations";
	} else {
		return @"Canvas";
	}
}

# laufen lassen

# sektionen deutlicher trennen?

MainMenu.xib oeffnen, einen TableView unter den TableViewController ziehen und delegate und datasource verbinden und style auf grouped setzen

# laufen lassen

# wieder auf plain setzen


# autorotation? in allen 4 view controllern:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return YES;
}

# laufen lassen

# source view direkt vom webview
#import "WebDemoSourceViewController.h"

in viewDidLoad:
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch
																							target:self action:@selector(showSource)] autorelease];
	
- (void)showSource {
	WebDemoSourceViewController *sourceController = [[WebDemoSourceViewController alloc] initWithWebDemo:webDemo];
	UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:sourceController];

	controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

	sourceController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemReply
																								  target:sourceController action:@selector(dismissModalViewControllerAnimated:)] autorelease];

	[self presentModalViewController: controller animated: YES];


	[controller release];
	[sourceController release];
}

# laufen lassen







4:40  - datasource
39:00 - autorotation wichtig!
You can’t perform that action at this time.