//

AdvancedTableViewCells

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 ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Berichten van vandaag

Reageren

 

Discussietools Weergave
  #1  
Oud 11-01-10, 14:16
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard 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
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 11-01-10, 18:09
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

In RootViewController.m zie je de volgende code staan:
Code:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Dit wordt aangeroepen wanneer je een rij in de UITableView selecteerd.
indexPath is de sectie en de rij.

Je moet hier dan dus zoiets neerzetten:
Code:
if ([[indexPATH] indexPath] == 1) {
Laat nieuwe view zien
}
  #3  
Oud 11-01-10, 19:03
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard

@Frog , ik krijg de volgende foutmelding: Expected identifier or '(before 'if'


  #4  
Oud 11-01-10, 22:51
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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  
Oud 12-01-10, 00:37
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard

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  
Oud 12-01-10, 18:43
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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];
Op de plaats van yourView zet je dan de view neer die je dan moet zien. Je hebt geen UIViewController nodig, alleen een UIView waar je een IBOutlet aan hebt gekoppeld.
  #7  
Oud 12-01-10, 21:53
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard

Citaat:
Op de plaats van yourView zet je dan de view neer die je dan moet zien. Je hebt geen UIViewController nodig, alleen een UIView waar je een IBOutlet aan hebt gekoppeld.
Zou je dat nog wat uitgebreider willen uitleggen welke stappen ik moet doen om een view te maken zodat hij werkt. Want ik geen IBOutlet toevoegen...het volgende screen zoals het hoort volgens krijg ik niet. Ik zie geen Class Outlets venster.

Zo hoort het volgens mij...maar bij mij staat geen IBOutlet.
http://icodeblog.com/wp-content/uplo...10setclass.png
  #8  
Oud 12-01-10, 22:48
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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  
Oud 13-01-10, 16:10
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard

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
RootViewController.m
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
Met IB in RootViewController.xib een view toegevoegd. Ik heb er even screenshots van gemaakt:

//edit screenshots verwijderd

Laatst gewijzigd door Alwinkov; 13-01-10 om 22:27.
  #10  
Oud 13-01-10, 17:44
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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  
Oud 13-01-10, 18:15
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard

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  
Oud 13-01-10, 20:45
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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.
Bijgevoegde bestanden
Bestandstype: zip AdvancedTableViewCells.zip‎ (966,1 KB, 9x gelezen)
  #13  
Oud 13-01-10, 21:54
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard

Frog, super bedankt!

Nu zie ik wat ik fout had gedaan, bijv View wat View Controller moet zijn in IB...
  #14  
Oud 14-01-10, 18:29
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

Geen probleem!
  #15  
Oud 14-01-10, 23:49
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard



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  
Oud 18-01-10, 21:05
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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  
Oud 20-01-10, 18:24
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard

NP , ik had al data vervangen door data1 maar zonder succes...
  #18  
Oud 20-01-10, 19:05
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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  
Oud 20-01-10, 21:12
Alwinkov Alwinkov is offline
• iOS 5.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Arnhem/Stockholm
Berichten: 38
Standaard

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  
Oud 20-01-10, 23:04
Frog Frog is offline
• iOS 4.2.1
• Ik heb geen iPad
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2008
Berichten: 379
Standaard

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.
Reageren



Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 16:45.