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/)
-   -   Knoppen koppelen (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/74148-knoppen-koppelen.html)

Zaankantertje75 06-10-10 13:16

Knoppen koppelen
 
Beste ontwikkelaars,

Ik ben nieuw en heb net de iPhone SDK Essentials training van Simon Allardice gevolgd via Lynda.com

Het enige wat hij niet behandeld heeft is het gene wat ik nu nodig heb.


Ik heb een knop en die wil ik linken aan een andere soort applicatie.

dus van een tabbar naar een navigation, of kan dat niet?

dat is dus een tabbaar app moet maken en dan de navigatie er in moet schrijven?

Alvast bedankt voor de hulp :)

Geno 13-10-10 16:19

Je bent niet heel duidelijk. Zou je het wat beter kunnen omschrijven?

Zaankantertje75 13-10-10 16:41

2 Bijlage(n)
Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 584381)
Je bent niet heel duidelijk. Zou je het wat beter kunnen omschrijven?

hmm ja sorry,

nou kijk ik heb een tab-bar gebaseerde applicatie met 3 tabs.

Op de eerste tab zit een knop met probeer whizzie.
Bijlage 9367
die moet navigeren naar een andere XIB bestand.
Bijlage 9368
Het liefst wil ik daar een navigatie gebaseerde applicatie met daar in filmpjes.

ik heb wat tutorials gevolgd. maar bleef hangen bij het interface koppelen aan de IBAction/IBOutlet. Als ik op me files owner druk staat de outlet/actie er niet tussen.


alvast bedankt.

Geno 13-10-10 21:51

Als je een navigationbar wil gebruiken, dan moet je eerste view ook een navigationbar hebben. Je eerste view is namelijk de RootViewController die een NavigationController heeft.

Wat beter is, is om een ModalViewController te gebruiken. Hiermee verschuift er een complete view over je huidige view heen. Je kan ook de animatie veranderen en een flip animatie gebruiken. Hierdoor lijkt het alsof je applicatie omdraait naar de volgende view (zie Weer en Aandelen app als je iets gaat instellen).

Een ModalViewController werkt anders dan bv. een TabBarController of NavigationController.

Bij een ModalViewController moet je je eerste view als delegate aangeven (om notificaties te ontvangen). En je tweede view moet een delegate protocol bevatten, anders verdwijnt je Modal View niet meer als de gebruiker op een knop drukt om terug te gaan.

Als je snel wil zien hoe het werkt, kan je het beste een nieuw Project aanmaken in Xcode en dan Utility application template gebruiken. Daar kan je precies zien hoe je de @protocol delegates moet implementeren en hoe je je IBAction moet gebruiken.

Succes ermee.

Zaankantertje75 14-10-10 11:48

Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 584698)
Als je een navigationbar wil gebruiken, dan moet je eerste view ook een navigationbar hebben. Je eerste view is namelijk de RootViewController die een NavigationController heeft.

Wat beter is, is om een ModalViewController te gebruiken. Hiermee verschuift er een complete view over je huidige view heen. Je kan ook de animatie veranderen en een flip animatie gebruiken. Hierdoor lijkt het alsof je applicatie omdraait naar de volgende view (zie Weer en Aandelen app als je iets gaat instellen).

Een ModalViewController werkt anders dan bv. een TabBarController of NavigationController.

Bij een ModalViewController moet je je eerste view als delegate aangeven (om notificaties te ontvangen). En je tweede view moet een delegate protocol bevatten, anders verdwijnt je Modal View niet meer als de gebruiker op een knop drukt om terug te gaan.

Als je snel wil zien hoe het werkt, kan je het beste een nieuw Project aanmaken in Xcode en dan Utility application template gebruiken. Daar kan je precies zien hoe je de @protocol delegates moet implementeren en hoe je je IBAction moet gebruiken.

Succes ermee.

Hmm, ja oké. maar kijk ik heb dus een applicatie gemaakt. in een tab bar app.

Daar moet je toch ook gewoon mee kunnen navigeren naar een navigatie?

ik wil deze code gebruiken maar die werkt denk niet bij een tab-br app.

.h file
@class ProbeerView;
@interface FirstViewController : UIViewController {
IBOutlet ProbeerView *probeerVC;
IBOutlet UITextField *txtName;

}
- (IBAction) pressedButton;

@property (nonatomic, retain) ProbeerView *probeerVC;



.m file
#import "ProbeerView.h"
@synthesize probeerVC;

- (IBAction) pressedButton {
[[self navigationController] pushViewController:probeerVC animated:YES];
}


Want bij de probeer view heb ik dus een soort van het zelfde gedaan maar dan geen push maar een pop zodat hij weg gaat.

En daar staat pressedButton wel in mijn received actions van IB.
maar bij de IB van me FirstViewController komt ie niet voor in de received actions.

Daar zit ik nu op vast.

in iedergeval bedankt voor je tijd!

Geno 14-10-10 16:51

Het kan wel, je kan een UINavigationBar combineren met een UITabBar. Je mist nog een NavigationController.

Je roept [self navigationController] aan maar je huidige view bevat geen navigationController.

Zaankantertje75 14-10-10 17:01

Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 585159)
Het kan wel, je kan een UINavigationBar combineren met een UITabBar. Je mist nog een NavigationController.

Je roept [self navigationController] aan maar je huidige view bevat geen navigationController.

ja, klopt daar kwam ik vanmiddag achter.

Maar als ik dan zijn view koppel aan firstviewcontroller dan krijg ik deze warning:

Warning:

Navigation Controller, id 32. Unsupported Configuration; The 'view' outlet of 'Navigation Controller' is connected to 'View', but this view controller is not intended to have its view set in this manner.

Sorry als ik erg dom overkom ofso. maar ben net begonnen :P

Geno 14-10-10 17:05

Als je een navigationController hebt, moet je daar niks mee doen met Interface Builder.

Wat je wel kan doen is in in je FirstView.xib een UINavigationBar plaatsen. En ook in je ProbeerView.xib. Dan krijg je automatisch een backbutton in je ProbeerView om weer terug te gaan naar je vorige view.

Zaankantertje75 14-10-10 17:16

Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 585176)
Als je een navigationController hebt, moet je daar niks mee doen met Interface Builder.

Wat je wel kan doen is in in je FirstView.xib een UINavigationBar plaatsen. En ook in je ProbeerView.xib. Dan krijg je automatisch een backbutton in je ProbeerView om weer terug te gaan naar je vorige view.

Ja, ok dat zei die man ook in die tutorial.

Dat heb ik geprobeerd. en gedaan.

Maar het probleem blijft dat hij nog steeds niet in mij received actions zichtbaar is. ik heb zelfs een navigation controller in me firstview gezet en dan gelinkt aan me view.

Als ik die knop op me tab-bar view connect aan die actie dan moet hij het doen..

Geno 14-10-10 21:14

Ik heb het zelf ook even geprobeerd en het is wat lastiger dan ik dacht.

Ik heb het voor elkaar gekregen door Navigation Controllers aan te maken in de AppDelegate in deze method:

Code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
En ze daar in een mutable array te stoppen en vervolgens de array te laden in mn TabBarController

Code:

NSMutableArray *allViewControllers = [[NSMutableArray alloc] initWithCapacity:2];
       
FirstViewController *firstViewController;
firstViewController = [[FirstViewController alloc] init];
navigationController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

[allViewControllers addObject:navigationController];
[navigationController release];
[firstViewController release];

// hiertussen moet je je tweede view aanmaken en toewijzen

tabBarController.viewControllers = allViewControllers;
       
[allViewControllers release];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

return YES;

Beter blijft toch om een ModalViewController te gebruiken vind ik.

Zaankantertje75 15-10-10 13:38

1 Bijlage(n)
Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 585368)
Ik heb het zelf ook even geprobeerd en het is wat lastiger dan ik dacht.

Ik heb het voor elkaar gekregen door Navigation Controllers aan te maken in de AppDelegate in deze method:

Code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
En ze daar in een mutable array te stoppen en vervolgens de array te laden in mn TabBarController

Code:

NSMutableArray *allViewControllers = [[NSMutableArray alloc] initWithCapacity:2];
       
FirstViewController *firstViewController;
firstViewController = [[FirstViewController alloc] init];
navigationController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

[allViewControllers addObject:navigationController];
[navigationController release];
[firstViewController release];

// hiertussen moet je je tweede view aanmaken en toewijzen

tabBarController.viewControllers = allViewControllers;
       
[allViewControllers release];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

return YES;

Beter blijft toch om een ModalViewController te gebruiken vind ik.

Ja, ik merk het ik heb het even geprobeerd. Maar dat is voor mij denk ik te lastig bleef telkens met 1 error over. wat ik ook deed.

Maaris het niet simpeler? ik bedoel het enige wat er volgens mij hoeft te gebeuren is dat ik de actie pressed button moet receiven in me first view zoals hier. bij me probeer view

Bijlage 9372

thanks voor je moeite anyway!

Geno 15-10-10 21:09

Ik denk niet dat je een tabbarcontroller en navigationcontroller kan combineren op jouw manier. Maar zo te zien heb je nog geen tabbarcontroller.

Dan zou de code die je eerst had moeten werken (wel ook je navigationcontroller declareren in je AppDelegate en ook daar je navigationcontroller laden).

Verder deze method gebruiken voor je knop bij je first view

Code:

- (IBAction)pressedButton:(id)sender;
Als het goed is zou je het wel moeten zien nu.

Zaankantertje75 18-10-10 12:50

Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 586085)
Ik denk niet dat je een tabbarcontroller en navigationcontroller kan combineren op jouw manier. Maar zo te zien heb je nog geen tabbarcontroller.

Dan zou de code die je eerst had moeten werken (wel ook je navigationcontroller declareren in je AppDelegate en ook daar je navigationcontroller laden).

Verder deze method gebruiken voor je knop bij je first view

Code:

- (IBAction)pressedButton:(id)sender;
Als het goed is zou je het wel moeten zien nu.

Ja, ik heb hem nu nog even gedaan.

Heb hem goed gekregen geen errors, maar wat ik dan krijg als ik me applicatie open. is een tab-bar over me bestaande tab-bar. en een navigatie bar.

Ik weet niet of die perse nodig is om te kunne navigeren naar een navigatie view?

Me tabbarcontroller zit in me mainView.xib daar heb ik ook de knoppen veranderd enzo.

maar.. die id sender moet ik in de .h zetten ?

Tx!

Bram

Geno 18-10-10 16:12

Werkt je tabbar wel op die manier?

ja (id)sender ook in je header file zetten.

Je hebt altijd een navigation controller nodig voor een navigatie view. De navigation controller regelt alle views die gebruik maken van een navigatie view. Of de navigatiebar nu wel of niet zichtbaar is, dat maakt niet uit.

Zaankantertje75 18-10-10 16:19

Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 587580)
Werkt je tabbar wel op die manier?

ja (id)sender ook in je header file zetten.

Je hebt altijd een navigation controller nodig voor een navigatie view. De navigation controller regelt alle views die gebruik maken van een navigatie view. Of de navigatiebar nu wel of niet zichtbaar is, dat maakt niet uit.

Nee, want die zwarte balk die is gecreeerd via de code. komt over me bestaande heen dus kan niet op de knoppen drukken.

Ok, nou ja dat zou dan maar moeten. Maar ik loop bij meerdere forums.

Iedereen zecht dat het zo wel zou moeten lukken maar snappen ook iet hellemaal waarom het niet lukt.

dus om terug te vallen op je model view.

Kan ik dat toepassen op deze overgang van tab-bar naar navigationbar view?

Want die tab-bar moet blijven om naar contact en over ons te kunnen navigeren.

Tx voor de informatie

Geno 18-10-10 23:36

ModalViewController gebruik je bij ModalView en niet bij NavigationView. Wat je met een ModalViewController kan doen is dat er een complete view over je huidige view gaat.

Het lastige aan het gebruiken van een Tabbar en Navigationview is dat ze allebei een controller nodig hebben om views af te handelen.

1 daarvan is de RootController en in dit geval moet dat de TabBarController zijn. Dat is je RootController die je inlaadt in je AppDelegate class.
Hoe dit precies werkt, is de code die ik een paar posts terug heb neergezet.

Ik zou die TabBarController en Tabbar niet met de hand toevoegen in Interface Builder, want wat je nu hebt lijkt niet echt te werken. Ik zou ervoor kiezen om een nieuw project te starten in Xcode en een TabBar template te kiezen zodat je in ieder geval zeker weet dat je TabBar werkt.

Zaankantertje75 19-10-10 11:00

Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 587912)
ModalViewController gebruik je bij ModalView en niet bij NavigationView. Wat je met een ModalViewController kan doen is dat er een complete view over je huidige view gaat.

Het lastige aan het gebruiken van een Tabbar en Navigationview is dat ze allebei een controller nodig hebben om views af te handelen.

1 daarvan is de RootController en in dit geval moet dat de TabBarController zijn. Dat is je RootController die je inlaadt in je AppDelegate class.
Hoe dit precies werkt, is de code die ik een paar posts terug heb neergezet.

Ik zou die TabBarController en Tabbar niet met de hand toevoegen in Interface Builder, want wat je nu hebt lijkt niet echt te werken. Ik zou ervoor kiezen om een nieuw project te starten in Xcode en een TabBar template te kiezen zodat je in ieder geval zeker weet dat je TabBar werkt.


Oké, ja ik heb dit project gestart als een tab-bar template. die tabs werken ook allemaal gewoon alleen die knop niet.. daar ben ik nu al zo´n 3 weken mee aan het kutten. De gozer van die tutorial die heeft een view based applicatie gemaakt.. dus ik dacht misschien lukt het daarom niet..

maar in de probeer.xib die ik bij heb gemaakt in het zelfde project. die pakt hem wel. Dat vind ik zo raar.

Geno 19-10-10 23:44

Je moet eerst de TabBarController aanmaken. Je hebt een template gebruikt, dus dat zit in orde. Een TabBarController bevat een array aan ViewControllers, dus daarom dat je elke ViewController moet toevoegen aan je TabBarController.

Als je in FirstViewController een NavigationView wil, moet je een NavigationController aanmaken (en je FirstViewController toevoegen) en dat toevoegen aan je TabBarController.

Ik heb de code wat makkelijker gemaakt, wat ik eerst had geschreven. Dit is de manier zoals Apple het aanraadt om een TabBar en NavigationView te combineren. Ik heb de code speciaal herschreven voor jouw project. Als je deze code gaat gebruiken dan moet je zorgen dat je alle Tabbars en NavigationBars die je via Interface Builder hebt aangemaakt, weghaalt. Ook uit je ProbeerView. De TabbarController en NavigationController zorgen automatisch al voor de juiste userinterface-elementen. Op die manier voorkom je ook dat je interface elementen op elkaar stapelt.

Ik heb de code uit een eigen project gehaald, waar SecondViewController de 2e view is die je kan aanklikken op de TabBar. Bij deze code ga ik ervan uit dat je een TabBar Template hebt gebruikt, dus een TabBarController declaren en releasen hoef je niet zelf te doen. Dit is wat je in je AppDelegate moet zetten (net als de vorige keer):

Code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
       
        tabBarController = [[UITabBarController alloc] init];
       
        FirstViewController *firstViewController = [[FirstViewController alloc] init];
        UINavigationController *navigationController = [[UINavigationController alloc] init];
        [navigationController pushViewController:firstViewController animated:NO];
       
        [firstViewController release];
       
        SecondViewController *secondViewController = [[SecondViewController alloc] init];
        UINavigationController *navController = [[UINavigationController alloc] init];
        [navController pushViewController:secondViewController animated:NO];

        [secondViewController release];
       
        tabBarController.viewControllers = [NSArray arrayWithObjects:navigationController, navController, nil];

        [navigationController release];
        [navController release];
       
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    return YES;
}

In je FirstViewController.h zet je dit:

Code:

- (IBAction)pressedButton:(id)sender;
Daarna deze method toevoegen in interface builder (knop koppelen;)).

In je FirstViewController.m zet je dit. Je ProbeerViewController noem je ProbeerVC dacht ik:

Code:

- (IBAction)pressedButton:(id)sender;

        ProbeerVC *probeerViewController = [[ProbeerVC alloc] init];
        [self.navigationController pushViewController:probeerViewController animated:YES];
        [probeerViewController release];                                               
}

Daarna zou het moeten werken zoals het hoort.:)

Zaankantertje75 20-10-10 12:31

Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 588529)
Je moet eerst de TabBarController aanmaken. Je hebt een template gebruikt, dus dat zit in orde. Een TabBarController bevat een array aan ViewControllers, dus daarom dat je elke ViewController moet toevoegen aan je TabBarController.

Als je in FirstViewController een NavigationView wil, moet je een NavigationController aanmaken (en je FirstViewController toevoegen) en dat toevoegen aan je TabBarController.

Ik heb de code wat makkelijker gemaakt, wat ik eerst had geschreven. Dit is de manier zoals Apple het aanraadt om een TabBar en NavigationView te combineren. Ik heb de code speciaal herschreven voor jouw project. Als je deze code gaat gebruiken dan moet je zorgen dat je alle Tabbars en NavigationBars die je via Interface Builder hebt aangemaakt, weghaalt. Ook uit je ProbeerView. De TabbarController en NavigationController zorgen automatisch al voor de juiste userinterface-elementen. Op die manier voorkom je ook dat je interface elementen op elkaar stapelt.

Ik heb de code uit een eigen project gehaald, waar SecondViewController de 2e view is die je kan aanklikken op de TabBar. Bij deze code ga ik ervan uit dat je een TabBar Template hebt gebruikt, dus een TabBarController declaren en releasen hoef je niet zelf te doen. Dit is wat je in je AppDelegate moet zetten (net als de vorige keer):

Code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
       
        tabBarController = [[UITabBarController alloc] init];
       
        FirstViewController *firstViewController = [[FirstViewController alloc] init];
        UINavigationController *navigationController = [[UINavigationController alloc] init];
        [navigationController pushViewController:firstViewController animated:NO];
       
        [firstViewController release];
       
        SecondViewController *secondViewController = [[SecondViewController alloc] init];
        UINavigationController *navController = [[UINavigationController alloc] init];
        [navController pushViewController:secondViewController animated:NO];

        [secondViewController release];
       
        tabBarController.viewControllers = [NSArray arrayWithObjects:navigationController, navController, nil];

        [navigationController release];
        [navController release];
       
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    return YES;
}

In je FirstViewController.h zet je dit:

Code:

- (IBAction)pressedButton:(id)sender;
Daarna deze method toevoegen in interface builder (knop koppelen;)).

In je FirstViewController.m zet je dit. Je ProbeerViewController noem je ProbeerVC dacht ik:

Code:

- (IBAction)pressedButton:(id)sender;

        ProbeerVC *probeerViewController = [[ProbeerVC alloc] init];
        [self.navigationController pushViewController:probeerViewController animated:YES];
        [probeerViewController release];                                               
}

Daarna zou het moeten werken zoals het hoort.:)

hmm dus eigenlijk me hele applicatie opnieuw maken maar dan zonder IB. alleen IB om te koppelen. ok ik ga het proberen...

hmm na toch wat gekut met errors enzo is het me gelukt. alleen is me achtergrond en me knoppen en zo weg :P.. maare ik bleef bij de stat koppelen weer vast staan.

Zou het een bug ofso kunnen zijn?? ik heb namenlijk meerdere dingen geprobeerd en bij alles komt er geen received action binnen.

In iedergeval bedankt voor je codes en je tijd!

Bram

Zaankantertje75 20-10-10 17:15

1 Bijlage(n)
Citaat:

Oorspronkelijk geplaatst door Geno (Bericht 588529)
Je moet eerst de TabBarController aanmaken. Je hebt een template gebruikt, dus dat zit in orde. Een TabBarController bevat een array aan ViewControllers, dus daarom dat je elke ViewController moet toevoegen aan je TabBarController.

Als je in FirstViewController een NavigationView wil, moet je een NavigationController aanmaken (en je FirstViewController toevoegen) en dat toevoegen aan je TabBarController.

Ik heb de code wat makkelijker gemaakt, wat ik eerst had geschreven. Dit is de manier zoals Apple het aanraadt om een TabBar en NavigationView te combineren. Ik heb de code speciaal herschreven voor jouw project. Als je deze code gaat gebruiken dan moet je zorgen dat je alle Tabbars en NavigationBars die je via Interface Builder hebt aangemaakt, weghaalt. Ook uit je ProbeerView. De TabbarController en NavigationController zorgen automatisch al voor de juiste userinterface-elementen. Op die manier voorkom je ook dat je interface elementen op elkaar stapelt.

Ik heb de code uit een eigen project gehaald, waar SecondViewController de 2e view is die je kan aanklikken op de TabBar. Bij deze code ga ik ervan uit dat je een TabBar Template hebt gebruikt, dus een TabBarController declaren en releasen hoef je niet zelf te doen. Dit is wat je in je AppDelegate moet zetten (net als de vorige keer):

Code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
       
        tabBarController = [[UITabBarController alloc] init];
       
        FirstViewController *firstViewController = [[FirstViewController alloc] init];
        UINavigationController *navigationController = [[UINavigationController alloc] init];
        [navigationController pushViewController:firstViewController animated:NO];
       
        [firstViewController release];
       
        SecondViewController *secondViewController = [[SecondViewController alloc] init];
        UINavigationController *navController = [[UINavigationController alloc] init];
        [navController pushViewController:secondViewController animated:NO];

        [secondViewController release];
       
        tabBarController.viewControllers = [NSArray arrayWithObjects:navigationController, navController, nil];

        [navigationController release];
        [navController release];
       
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    return YES;
}

In je FirstViewController.h zet je dit:

Code:

- (IBAction)pressedButton:(id)sender;
Daarna deze method toevoegen in interface builder (knop koppelen;)).

In je FirstViewController.m zet je dit. Je ProbeerViewController noem je ProbeerVC dacht ik:

Code:

- (IBAction)pressedButton:(id)sender;

        ProbeerVC *probeerViewController = [[ProbeerVC alloc] init];
        [self.navigationController pushViewController:probeerViewController animated:YES];
        [probeerViewController release];                                               
}

Daarna zou het moeten werken zoals het hoort.:)

ik heb iets anders geprobeerd ik heb in Interface builder bij classes de AppDelegate naast de files owner gezet.

Bijlage 9422

en de code's die ik in de firstviewcontroller.h/m heb in de appdelegate.h/m gezet.

Toen ontving Interface Builder wel de received action; pressedButton.

Dus ik heb die gelinkt. En als ik dus nu op me knop klik dan stopt me applicatie er mee.. dus hij crashed lijkt mij?..

Is dat logisch? of is dat ook op een manier op te lossen?

Thanks!


Alle tijden zijn GMT +2. Het is nu 23:59.