08.02.2010 | 14:57
Vec sam postao po nekim stranim forumima ali ameri pavaju pa cu ovdje i na mackorisniku probat mozda se nadje kakva dobra duša...
Znači šta pokušavam napraviti je jedan tab bar koji upravlja Viewovima u različitim divovima. Neki od tih tabova imaju svoj navigation kontroler, neki ne...
IB fileovi i veze među njima su na slikama da ne duljim previše, a i neka netko pametniji od mene pregleda jesam li sve dobro povezao...
Znači to sve funkcionira, tab bar upravlja i izmjenjuje pogleda, i pogledi se normalno iscrtavaju, uitableview na prvom pogledu, dohvaća tablesource i crta svoje ćelije, sve fercera nevjerojatno... Table data source je plist file sa slike 5... za sada je plist file a kasnije dolazi baza podataka sa istom strukturom...
Kako se vidi iz strukture plist file-a ideja je da u rootu pokazem firstviewcontroller i napunim tablicu iz root data sourcea. Prilikom klika na pojedini red, vadim svu "djecu" iz tog reda i koristim ih kao datasource za isti view controler... Ovako koristim isti pogled rekurzivno i samo ih pusham jedan na drugi sve do trena kad vise nemam "djece". to bi znacilo da sam dosao do kraja (nema podkategorija znaci riječ je o proizvodu) i da prikažem singleview iliti ga opis pojedinog proizvoda.
U ideji ovo sve štima, i u praksi djelomično radi...
Znači događa se sljedeće:
Dobijem root view, sa ispisanim svim root podatcima, svaki od njih klikom daje odgovarajući novi pogled (pusha na navigationcontroler) bilo da ima ili nema djece (znaci u ovoj fazi navigationcontroler dobro radi posao i distinkciju ima ili nema djece), ali kad probam u tom drugom pogledu pogledati "djecu" (pushati navigationcontroller još jednom) ništa se ne događa... U konzoli vidim da on radi uredno distinkciju između ima i nema djece (znači da se datasource tablice uredno učitao) ali ništa se ne događa...
evo firstviewcontroller na pregled....
#import "FirstViewController.h"
#import "SingleViewController.h"
#import "CrotuneDemoAppDelegate.h"
#import "CellView.h"
@implementation FirstViewController
@synthesize tableDataSource,CurrentTitle,CurrentLevel,navigationController,reklama,mreklama,stringMreklama,stringReklama;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
//
if (CurrentLevel==0) {
//start datasource
NSArray *tempArray = [[NSArray alloc] init];
self.tableDataSource=tempArray;
[tempArray release];
CrotuneDemoAppDelegate *AppDelegate = (CrotuneDemoAppDelegate *)[[UIApplication sharedApplication] delegate];
self.tableDataSource = [AppDelegate.data objectForKey:@"Rows"];
self.navigationItem.title = @"Categories";
[mreklama setImage:[UIImage imageNamed:@"mkras.jpg"]];
[reklama setImage:[UIImage imageNamed:@"kras.jpg"]];
}
else{
self.navigationItem.title = CurrentTitle;
[mreklama setImage:[UIImage imageNamed:stringMreklama]];
[reklama setImage:[UIImage imageNamed:stringReklama]];
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:1];
[UIView setAnimationDuration:1];
[reklama setAlpha:0];
[UIView commitAnimations];
//NSLog(@"%@",tableDataSource);
}
//table delegate metods
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.tableDataSource count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellView";
CellView *cell = (CellView *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil){
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CellView" owner:nil options:nil];
for(id currentObject in topLevelObjects)
{
if([currentObject isKindOfClass:[CellView class]])
{
cell = (CellView *)currentObject;
break;
}
}
}
// Set up the cell...
NSDictionary *dictionary =[self.tableDataSource objectAtIndex:indexPath.row];
[[cell title] setText:[dictionary objectForKey:@"Title"]];
[[cell background] setImage:[UIImage imageNamed:[dictionary objectForKey:@"Image"]]];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the dictionary of the selected data source.
NSDictionary *dictionary = [self.tableDataSource objectAtIndex:indexPath.row];
//Get the children of the present item.
NSArray *Children = [dictionary objectForKey:@"Children"];
if([Children count] == 0) {
SingleViewController *detailView =[[SingleViewController alloc] initWithNibName:@"SingleView" bundle:[NSBundle mainBundle]];
//ovdje dodaj objekt sa podatcima od pojedinog subjekta
[self.navigationController pushViewController:detailView animated:YES];
[detailView release];
}
else {
//Prepare to tableview.
FirstViewController *nextView = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:[NSBundle mainBundle]];
//Increment the Current View
nextView.CurrentLevel += 1;
//Set the title;
nextView.CurrentTitle = [dictionary objectForKey:@"Title"];
nextView.stringMreklama=[dictionary objectForKey:@"SAdd"];
nextView.stringReklama=[dictionary objectForKey:@"LAdd"];
nextView.tableDataSource = Children;
//Push the new table view on the stack
[self.navigationController pushViewController:nextView animated:YES];
[nextView release];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
molim pomoć.. glava boli više...