AdvancedTableViewCells discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Beste Devs Ik ben bezig met de sample code van Apple AdvancedTableViewCells. Ik heb het design aangepast en heb meer duidelijkheid gekregen hoe de vormgeving ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
AdvancedTableViewCells
Beste Devs
Ik ben bezig met de sample code van Apple AdvancedTableViewCells. Ik heb het design aangepast en heb meer duidelijkheid gekregen hoe de vormgeving is opgebouwd. Dat gaat allemaal naar wens. Wat mij niet lukt is om te zorgen dat als je op de eerste knop drukt dat hij naar een andere TableView gaat. Misschien dat iemand zo vriendelijk wilt zijn om te vertellen welke stappen ik moet doen aan de hand van de sample code. Wat moet ik allemaal veranderen? Data.plist, Nieuwe ViewController toevoegen ect... Ik heb een aantal video's en tutorials geprobeerd maar ik krijg het niet voor elkaar om AdvancedTableViewCells te ''updaten'' AdvancedTableViewCells |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
|||
|
|||
In RootViewController.m zie je de volgende code staan:
Code:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; } indexPath is de sectie en de rij. Je moet hier dan dus zoiets neerzetten: Code:
if ([[indexPATH] indexPath] == 1) { Laat nieuwe view zien } |
#3
|
|||
|
|||
@Frog , ik krijg de volgende foutmelding: Expected identifier or '(before 'if'
|
#4
|
|||
|
|||
Probeer de volgende code maar eens:
Code:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if ([indexPath row] == 0) { DOE IETS } else if ([indexPath row] == 1) { DOE IETS } } |
#5
|
|||
|
|||
Hij geeft geen foutmelding en geen crash. Als ik op de eerste of de twee knop klik dan gaat hij niet naar een andere view. Ik had voor de zekerheid even een nieuwe TestViewController aangemaakt..maar werkt nog niet...
|
#6
|
|||
|
|||
Oh, ik dacht dat je dat al wist. Het klopt inderdaad dat dit niets doet, met deze code weet je alleen wanneer er op een TableViewRow wordt gedrukt, maar je doet niets. Die code moet staan op de plaats waar "DOE IETS" staat. Je kan het op twee manieren doen:
1. AddSub: voeg een subview van de huidige view toe. Dit kan, maar werkt niet met de UINavigationController samen en is met een TableView meestal een mindere methode. 2. Zeg tegen de UINavigationController dat hij een nieuwe view moet openen. Dat doe je door op de plaats van "DOE IETS" de volgende code te zetten: Code:
[self.navigationController pushToViewController:yourView animated:YES]; |
#7
|
|||
|
|||
Citaat:
Zo hoort het volgens mij...maar bij mij staat geen IBOutlet. http://icodeblog.com/wp-content/uplo...10setclass.png |
#8
|
|||
|
|||
Je voegt in interface builder een UIView toe en je voegt in het .h bestand van je RootViewController onder @interface de volgende regel toe: "IBOutlet UIView *yourView;". Dan koppel je in interface builder de outlet aan je view (2e tab). Je hebt dan een outlet gemaakt en je kan daaraan refereren door gewoon de naam van die outlet (in dit geval yourView) in te typen.
|
#9
|
|||
|
|||
Ik heb de view yourView laten staan zodat als het werkt. Dat ik dan gewoon alles gemakkelijk kan aanpassen. Zodra ik op de eerste of tweede knop druk dan krijg ik een crash... Heb even alles online gezet, ik denk zelf dat ik ergens een foutje maak in IB...
RootViewController.h Code:
#import <UIKit/UIKit.h> #import "ApplicationCell.h" @interface RootViewController : UITableViewController { IBOutlet UIView *yourView; ApplicationCell *tmpCell; NSArray *data; } @property (nonatomic, assign) IBOutlet ApplicationCell *tmpCell; @property (nonatomic, retain) NSArray *data; @end Code:
#import "RootViewController.h" #import "CompositeSubviewBasedApplicationCell.h" #import "HybridSubviewBasedApplicationCell.h" // Define one of the following macros to 1 to control which type of cell will be used. #define USE_INDIVIDUAL_SUBVIEWS_CELL 1 #define USE_COMPOSITE_SUBVIEW_CELL 0 #define USE_HYBRID_CELL 0 /* Predefined colors to alternate the background color of each cell row by row (see tableView:cellForRowAtIndexPath: and tableView:willDisplayCell:forRowAtIndexPath:). */ #define DARK_BACKGROUND [UIColor colorWithRed:151.0/255.0 green:152.0/255.0 blue:155.0/255.0 alpha:1.0] #define LIGHT_BACKGROUND [UIColor colorWithRed:172.0/255.0 green:173.0/255.0 blue:175.0/255.0 alpha:1.0] @implementation RootViewController @synthesize tmpCell, data; #pragma mark View controller methods - (void)viewDidLoad { [super viewDidLoad]; // Configure the table view. self.tableView.rowHeight = 73.0; self.tableView.backgroundColor = DARK_BACKGROUND; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; // Load the data. NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; self.data = [NSArray arrayWithContentsOfFile:dataPath]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { switch (toInterfaceOrientation) { case UIInterfaceOrientationPortrait: case UIInterfaceOrientationLandscapeLeft: case UIInterfaceOrientationLandscapeRight: return YES; default: return NO; } } #pragma mark Table view methods - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [data count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"ApplicationCell"; ApplicationCell *cell = (ApplicationCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { #if USE_INDIVIDUAL_SUBVIEWS_CELL [[NSBundle mainBundle] loadNibNamed:@"IndividualSubviewsBasedApplicationCell" owner:self options:nil]; cell = tmpCell; self.tmpCell = nil; #elif USE_COMPOSITE_SUBVIEW_CELL cell = [[[CompositeSubviewBasedApplicationCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ApplicationCell"] autorelease]; #elif USE_HYBRID_CELL cell = [[[HybridSubviewBasedApplicationCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ApplicationCell"] autorelease]; #endif } // Display dark and light background in alternate rows -- see tableView:willDisplayCell:forRowAtIndexPath:. cell.useDarkBackground = (indexPath.row % 2 == 0); // Configure the data for the cell. NSDictionary *dataItem = [data objectAtIndex:indexPath.row]; cell.icon = [UIImage imageNamed:[dataItem objectForKey:@"Icon"]]; cell.publisher = [dataItem objectForKey:@"Publisher"]; cell.name = [dataItem objectForKey:@"Name"]; cell.numRatings = [[dataItem objectForKey:@"NumRatings"] intValue]; cell.rating = [[dataItem objectForKey:@"Rating"] floatValue]; cell.price = [dataItem objectForKey:@"Price"]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell; } - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.backgroundColor = ((ApplicationCell *)cell).useDarkBackground ? DARK_BACKGROUND : LIGHT_BACKGROUND; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if ([indexPath row] == 0) { [self.navigationController pushToViewController:yourView animated:YES]; } else if ([indexPath row] == 1) { [self.navigationController pushToViewController:yourView animated:YES]; } } #pragma mark Memory management - (void)dealloc { [data release]; [super dealloc]; } @en //edit screenshots verwijderd Laatst gewijzigd door Alwinkov; 13-01-10 om 22:27. |
#10
|
|||
|
|||
Hoe heb je dat voor elkaar gekregen? In IB builder heb je yourView gekoppeld aan een UITableView, terwijl het een UIView hoort te zijn. Dat kan helemaal niet....
Raar, maar je moet de outlet yourView dus aan de view koppelen en niet aan de UITableView. Heb je deze code helemaal van een tutorial gekopieerd? Hij is namelijk onnodige dingen in voor jouw doeleinden. Sorry als het niet zo is, maar als je niet begrijpt wat je doet zal je nooit tot een perfecte app komen. Het is beter om de achtergrond van objective-c te. |
#11
|
|||
|
|||
Bijde gelinkt in IB. Het is een sample code van Apple. Er zitten een aantal dingen die ik wil gaan gebruiken. Verder ben ik bezig om Object-c te leren. (Heb verschillende tutorials en video trainingen gedaan, vind het alleen lastig om te zorgen dat de punten op de i staan)
Ik heb je even het project gestuurd via PM misschien dat je er even naar wilt kijken. Heb zelf het idee dat ik wat verkeerd heb gelinkt in IB. |
#12
|
|||
|
|||
Het werkt nu. Het was deels mijn fout en deels jouw fout. Jij had hem inderdaad verkeerd verbonden in IB, maar ik had 2 typfoutjes gemaakt waardoor hij niet werkte. Als bijlage van deze post heb ik de nieuwe versie en ik heb ook gelijk gezorgd dat een row in een tableview gedeselecteerd wordt.
|
#13
|
|||
|
|||
Frog, super bedankt!
Nu zie ik wat ik fout had gedaan, bijv View wat View Controller moet zijn in IB... |
#14
|
|||
|
|||
Geen probleem!
|
#15
|
|||
|
|||
Nog een vraag als het kan, dan weet ik genoeg om te zorgen dat mijn app de goede kant op gaat. Het is helemaal gelukt met de verschillende views. Nou heb ik aantal files gekopieerd en de naam veranderd. Als je nu op de eerste TableViewCell (knop 1) klikt, dan is het design gelijk aan de main view. Nu wil ik graag dat die view zijn informatie uit data1.plist haalt en niet uit data.plist...Nou had ik de code hieronder gekopieerd en aangepast maar werkte niet. Misschien is er een simpele regel om aan onderste code toe te voegen wat ook werkt? Code:
- (void)viewDidLoad { [super viewDidLoad]; // Configure the table view. self.tableView.rowHeight = 73.0; self.tableView.backgroundColor = DARK_BACKGROUND; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; // Load the data. NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; self.data = [NSArray arrayWithContentsOfFile:dataPath]; } |
#16
|
|||
|
|||
Sorry dat ik zo laat reageer, ik had het erg druk.
Je moet denk ik in de twee-na-laatste regel Data vervangen door Data1. |
#17
|
|||
|
|||
NP , ik had al data vervangen door data1 maar zonder succes...
|
#18
|
|||
|
|||
Weet je dat het hoofdlettergevoelig is en dat je bestand dus Data1 moet heten als je Data1 neerzet en niet data1. Ook moet je er natuurlijk .plist achterhebben.
|
#19
|
|||
|
|||
Dat weet ik Denk dat ik NSBundle mainBundle moet veranderen?
Code:
- (void)viewDidLoad { [super viewDidLoad]; // Configure the table view. self.tableView.rowHeight = 73.0; self.tableView.backgroundColor = DARK_BACKGROUND; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; // Load the data. NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; self.data = [NSArray arrayWithContentsOfFile:dataPath]; NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data1" ofType:@"plist"]; self.data = [NSArray arrayWithContentsOfFile:dataPath]; } |
#20
|
|||
|
|||
Nee, dat zegt alleen dat het in je bundle zit. Je zet nu 2x self.data, je moet
een nieuwe global variable data maken en daarna in een ander stuk code die variabele ook gebruiken. Is het trouwens niet beter om i.p.v. een nieuwe property list de data in de oude erbij te zetten. |
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
|
|