iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   UINavigationBarController (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/21227-uinavigationbarcontroller.html)

Pixxa 11-09-08 08:49

UINavigationBarController
 
Wie kan mij helpen, heb verschillende tutorial filmpjes gezien (oa van iphonedevcentral.org) maar krijg het niet voor elkaar om een functionerende UINavigationBarController te krijgen. Ik wil een Window Based application met een navigationbar bovenaan. Op die bar zijn 2 keuzes, Add en Edit. Als je op Add klikt moet er een nieuw view komen waar je zaken kan toevoegen. Als je op Edit druk moeten de al toegevoegde zaken te wijzigen zijn.

Wie kan me in de goede richting duwen..

ideveloper 11-09-08 10:55

kijk eens na de voorbeeld applicatie UICatalog. Die heeft mij veel geholpen hiermee.

Pixxa 11-09-08 11:03

Had ik inmiddels al gedownload ja! Maar kan die .xib niet openen (doet het niet) dus moet het uit de code halen en daar heb ik echt nog moeite mee.
Snap de structuur nog niet helemaal.

Malork 11-09-08 11:10

Wat werkt er niet precies?

Pixxa 11-09-08 11:17

Citaat:

Oorspronkelijk geplaatst door Malork (Bericht 187740)
Wat werkt er niet precies?

In princiepe werkt er niets. Het gaat erom dat ik nog niet weet hoe ik een nieuwe view aanmaak en tevoorschijn laat komen zodra ik in de MainView met die navigationbar bovenaan op het 'plusje' druk.

macfreaker 11-09-08 12:50

Een view moet je toch in een nieuwe class maken en deze daaraan koppelen of ben ik mis nu ? Ben zelf nog aan het leren, dus misschien ben ik wel verkeerd hoor.

Pixxa 11-09-08 13:12

Citaat:

Oorspronkelijk geplaatst door macfreaker (Bericht 187795)
Een view moet je toch in een nieuwe class maken en deze daaraan koppelen of ben ik mis nu ? Ben zelf nog aan het leren, dus misschien ben ik wel verkeerd hoor.

Volgens mij ook. Maar ik kan wel een nieuwe UIViewController aanmaken die een UIWindow aanmaakt waarin een UIView zit maar dan nog weet ik niet hoe ik dat plusje koppel :)

Malork 11-09-08 16:26

ik ben ook nog n00b, en kan er misschien naast zitten of misschien zelfs dom overkomen , maar ik kan mij herinneren dat je ook de view als subview aan het window moet koppelen...

...maar ik kan er dus helemaal naast zitten en totaal onlogisch klinken; heb teveel gelezen / gestoeid waardoor ik nu een en ander door elkaar gooi...hoogst irritant...

ideveloper 11-09-08 16:59

Citaat:

Oorspronkelijk geplaatst door Pixxa (Bericht 187732)
Had ik inmiddels al gedownload ja! Maar kan die .xib niet openen (doet het niet) dus moet het uit de code halen en daar heb ik echt nog moeite mee.
Snap de structuur nog niet helemaal.

Bij dit specifieke voorbeeld heb je niets aan de xib file. Alle schermen e.d. worden in de code aangemaakt. Gewoon proberen om een scherm aan te passen. Of zelf 1tje toe te voegen dmv het copieren van een bestaande en dan aanpassen. Terwijl je dit doet, kom je er vanzelf achter hoe het werkt. Teminste zo werkte het bij mij.

lnn.art 11-09-08 21:00

Moest je voor elke nieuwe 'tip' geen dollar betalen volgens Apple?

ideveloper 11-09-08 21:02

Citaat:

Oorspronkelijk geplaatst door lnn.art (Bericht 188064)
Moest je voor elke nieuwe 'tip' geen dollar betalen volgens Apple?

De facturen zijn al onderweg :)

Malork 11-09-08 21:19

ik ben nog geen officiele developer ;)

Pixxa 13-09-08 16:50

Lukt me nog niet hoor jongens. Heb geprobeerd om met de standaard project 'NavigationBar' te beginnen maar dat maakt het volgens mij alleen maar ingewikkelder.
Window based app is makkelijker denk ik. Ik open mn Xib, gooi er een view in die ik MainView noem en als het goed is moet daar dan ook een NavigationBar in. Of moet ik apart een NavigationBarController toevoegen?

Pixxa 19-09-08 12:52

Wie kan me even helpen. Ik heb deze tut gevolgd : Apple - Support - Discussions - [iphone]need help with ...

(onderaan)

Maar nu krijg ik deze error:

http://img227.imageshack.us/img227/1122/picture2yv1.png

http://img354.imageshack.us/img354/1899/picture1pk9.png

Snap niet zo goed wat ik fout doe.

Malork 20-09-08 02:03

heb je een @property aangemaakt in je AddViewController.h file voor addviewcontroller?

Iets in de stijl van:

@Property (nonatomic, retain) UINavigationBarController *AddViewController; ?

Dit is wat ik me dan zou kunnen voorstellen...

EDIT: Oh!!! waarschijnlijk een typo in je AddViewController.h die die syntax error veroorzaakt waardoor de synthesize niet werkt.

Pixxa 20-09-08 17:24

Ik heb hem ondertussen iets aangepast. Hij compiled succesvol maar zodra ik in de simulator op het plusje druk crashed hij keihard. Ik zie iets over het hoofd... Zal mn files posten:

AddViewController.h

Code:

//
//  AddViewController.h
//  Countdown
//
//  Created by Pixxa on 9/19/08.
//  Copyright 2008 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>


@interface AddViewController : UIViewController {

}

@end

AddViewController.m

Code:

//
//  AddViewController.m
//  Countdown
//
//  Created by Pixxa on 9/19/08.
//  Copyright 2008 __MyCompanyName__. All rights reserved.
//

#import "AddViewController.h"


@implementation AddViewController

//@synthesize view;

- (void)viewDidLoad {
        self.navigationItem.title = @"Add Item";
        //self.navigationItem.rightBarButtonItem = self.ButtonItem;
}

/*
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        return self;
}
*/

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
    [super dealloc];
}


@end

RootViewController.h

Code:

//
//  RootViewController.h
//  Countdown
//
//  Created by Pixxa on 9/18/08.
//  Copyright __MyCompanyName__ 2008. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "FruitViewController.h"
#import "AddViewController.h"

@interface RootViewController : UITableViewController {
       
        UINavigationController *navigationController;
        AddViewController *addViewController;
        FruitViewController *fruitView;

}



//@property(nonatomic, retain) AddViewController *addViewController;
@property(nonatomic, retain) FruitViewController *fruitView;
//@property (nonatomic, retain) UINavigationController *navigationController;

- (IBAction)AddButton:(id)sender;


@end

RootViewController.m

Code:

//
//  RootViewController.m
//  Countdown
//
//  Created by Pixxa on 9/18/08.
//  Copyright __MyCompanyName__ 2008. All rights reserved.
//

#import "RootViewController.h"
#import "CountdownAppDelegate.h"
#import "Fruit.h"
#import "AddViewController.h"

@interface RootViewController ()

@property (nonatomic, retain) UINavigationController *navigationController;
@property (nonatomic, retain) AddViewController *addViewController;

@end

@implementation RootViewController

@synthesize fruitView;
@synthesize addViewController;
@synthesize navigationController;


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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        CountdownAppDelegate *appDelegate = (CountdownAppDelegate *)[[UIApplication sharedApplication] delegate];
        return appDelegate.fruits.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   
    static NSString *CellIdentifier = @"Cell";
   
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }
       
        CountdownAppDelegate *appDelegate = (CountdownAppDelegate *)[[UIApplication sharedApplication] delegate];
        Fruit *f = (Fruit *)[appDelegate.fruits objectAtIndex:indexPath.row];
       
        [cell setText:f.name];
   
    // Set up the cell
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic
        CountdownAppDelegate *appDelegate = (CountdownAppDelegate *)[[UIApplication sharedApplication] delegate];
        Fruit *fruit = (Fruit *)[appDelegate.fruits objectAtIndex:indexPath.row];
       
        if(self.fruitView == nil) {
                FruitViewController *viewController = [[FruitViewController alloc] initWithNibName:@"FruitViewController" bundle:[NSBundle mainBundle]];
                self.fruitView = viewController;
                [viewController release];
               
}
        self.fruitView.title = [fruit name];
        [self.navigationController pushViewController:self.fruitView animated:YES];       
        [self.fruitView.fruitDescription setText:[fruit description]];
       
}




- (void)viewDidLoad {
    [super viewDidLoad];
    // Uncomment the following line to add the Edit button to the navigation bar.
        self.navigationItem.leftBarButtonItem = self.editButtonItem;
        self.title = @"Fruits";

}

- (IBAction)AddButton:(id)sender {
    AddViewController *controller = self.addViewController;
        if (navigationController == nil) {
        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
        self.navigationController = navigationController;
        [navigationController release];
    }
    [self.navigationController presentModalViewController:navigationController animated:YES];
    [controller setEditing:YES animated:NO];
}


- (AddViewController *)addViewController {
    // Instantiate the add view controller if necessary.
    if (addViewController == nil) {
        addViewController = [[AddViewController alloc] initWithNibName:@"AddViewController" bundle:nil];
    }
    return addViewController;
}

/*
- (IBAction)AddButton {
        [[AddViewController alloc] initWithNibName:@"AddViewController" bundle:[NSBundle mainBundle]];
       
       
        [self.navigationController pushViewController:addViewController animated:YES];
        [navigationController setEditing:NO animated:NO];
}
 
*/
 
 
/*
// Override to support editing the list
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
   
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
    } 
    if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    } 
}
*/


/*
// Override to support conditional editing of the list
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/


/*
// Override to support rearranging the list
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/


/*
// Override to support conditional rearranging of the list
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

/*
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
}
*/
/*
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
}
*/
/*
- (void)viewWillDisappear:(BOOL)animated {
}
*/
/*
- (void)viewDidDisappear:(BOOL)animated {
}
*/


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
       
    [super dealloc];
        [addViewController dealloc];
        [fruitView dealloc];
}


@end


CountdownAppDelegate.m

Code:

//
//  CountdownAppDelegate.h
//  Countdown
//
//  Created by Pixxa on 9/18/08.
//  Copyright __MyCompanyName__ 2008. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "AddViewController.h"

@interface CountdownAppDelegate : NSObject <UIApplicationDelegate> {
   
        NSMutableArray *fruits;
    IBOutlet UINavigationController *navigationController;
        IBOutlet UIWindow *window;



       
}



@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) UINavigationController *navigationController;
@property (nonatomic, retain) NSMutableArray *fruits;




@end

CountDownAppdelegate.m

Code:

//
//  CountdownAppDelegate.m
//  Countdown
//
//  Created by Pixxa on 9/18/08.
//  Copyright __MyCompanyName__ 2008. All rights reserved.
//

#import "CountdownAppDelegate.h"
#import "RootViewController.h"
#import "Fruit.h"
#import "AddViewController.h"


@implementation CountdownAppDelegate

@synthesize window;
@synthesize navigationController;
@synthesize fruits;



- (void)applicationDidFinishLaunching:(UIApplication *)application {
       
        Fruit *apple                =[[Fruit alloc] initWithName:@"Apple" description:@"Red Delicious are my favorite"];
        Fruit *orange                =[[Fruit alloc] initWithName:@"Orange" description:@"MMM... Fresh squeezed orange juice"];       
        Fruit *watermelon        =[[Fruit alloc] initWithName:@"Watermelon" description:@"My favorite flavor of Jolly Ranchers"];       
       
        self.fruits = [[NSMutableArray alloc] initWithObjects:apple,orange,watermelon,nil];
       
        // Configure and show the window
        [window addSubview:[navigationController view]];
        [window makeKeyAndVisible];
}



- (void)applicationWillTerminate:(UIApplication *)application {
        // Save data if appropriate
}


- (void)dealloc {

        [navigationController release];
        [window release];
        [super dealloc];
}

@end


Ik moet erbij zeggen dat ik nog niet alles snap en dat ik sommige stukken code uit andere sample projecten heb gebruikt, en aangepast naar mijn eigen code. Er kunnen dus misschien code instaan wat onnodig is of nergens op slaat. Hoop dat je me het dan kan uitleggen wat er niet klopt.

TinusOZ 22-09-08 04:50

Waarschijnlijk zul je een functie moeten toe voegen die heet setEditing zodat je je tabel in de editing mode kan zetten de functie zal er dan zo ongeveer zo uit zien
Code:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated{
[tableview setEditing:editing animated:YES];
}

Trouwens zie ik zo snel niet waar jij een plus button toevoegd misschien heb ik er over heen gelezen. In deze functie voeg je dan ook een add button toe en roep je jouw add viewcontroller classe aan. Ik hoop dat je zoiets bedoelt en dat het werkt.

Als ik de code tags niet goed gebruik laat het mij even weten.

Pixxa 22-09-08 14:03

Citaat:

Oorspronkelijk geplaatst door TinusOZ (Bericht 196415)
Waarschijnlijk zul je een functie moeten toe voegen die heet setEditing zodat je je tabel in de editing mode kan zetten de functie zal er dan zo ongeveer zo uit zien
Code:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated{
[tableview setEditing:editing animated:YES];
}

Trouwens zie ik zo snel niet waar jij een plus button toevoegd misschien heb ik er over heen gelezen. In deze functie voeg je dan ook een add button toe en roep je jouw add viewcontroller classe aan. Ik hoop dat je zoiets bedoelt en dat het werkt.

Als ik de code tags niet goed gebruik laat het mij even weten.

Plus button heb ik via IB toegevoegd.. of is dat niet genoeg?

TinusOZ 22-09-08 14:27

Citaat:

Oorspronkelijk geplaatst door Pixxa (Bericht 196566)
Plus button heb ik via IB toegevoegd.. of is dat niet genoeg?

Dat ligt eraan waar je de plus button hebt geplaatst het kan zijn dat je nu twee buttons over elkaar hebt omdat je in de rootviewcontroller een edit button toevoegt. Dus of je moet een button met een plusje zien of een button met edit erop of beide als de plus button aan de rechter kant staat.

Pixxa 22-09-08 14:59

Citaat:

Oorspronkelijk geplaatst door TinusOZ (Bericht 196576)
Dat ligt eraan waar je de plus button hebt geplaatst het kan zijn dat je nu twee buttons over elkaar hebt omdat je in de rootviewcontroller een edit button toevoegt. Dus of je moet een button met een plusje zien of een button met edit erop of beide als de plus button aan de rechter kant staat.

Nee, ik zie beide.


Alle tijden zijn GMT +2. Het is nu 19:57.