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/)
-   -   Probleem: Tut UIWebView combineren met Tab Bar App-project (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/48405-probleem-tut-uiwebview-combineren-tab-bar-app-project.html)

NickSmits 16-11-09 20:07

Probleem: Tut UIWebView combineren met Tab Bar App-project
 
Hoi!

Ook ik ben begonnen met het (proberen) te ontwikkelen van een app. Zoals de titel al zegt probeer ik een UIWebView van een tutorial te combineren met de Tab Bar Application template in Xcode.

Ik heb alles samengevoegd, maar dan. Dan krijg ik witte schermen (alle drie de views zijn wit). Ik heb wat trial&error gedaan, en ik heb een regel gevonden; als ik die regel weg comment dan laden de views gewoon (zonder de UIWebView natuurlijk).

Dat is de volgende regel:
Code:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
   
    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:tabBarController.view];
       
        self.wvTutorial = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
       
        [window addSubview:[wvTutorial view]];
       
        // Override point for customization after app launch       
    [window makeKeyAndVisible];
}

Wanneer ik alleen de UIWebView gebruik, werkt de code prima. Daarom denk ik eigenlijk dat andere code ervoor zorgt dat het niet lukt. Ik hoop dat jullie me kunnen helpen.

Bedankt!

JWVD 16-11-09 20:14

Als je toch Interface Builder gebruikt, kan je toch net zo goed de webview met Interface Builder in de TabBarController zetten?

Wat je nu doet is een TabBarController in je Window zetten, en daar overheen een WebView, dat werkt natuurlijk niet :p

NickSmits 17-11-09 17:00

Om maar eerlijk te zeggen: ik begrijp niet precies wat je bedoeld. In één van de views moet de UIWebView komen, kan dat dan ook?

Heb gisteravond een boek besteld dat hopelijk wat gaat helpen...

Whacko 17-11-09 17:12

Code:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
   
    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:tabBarController.view];
   
    self.wvTutorial = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
   
[tabBarController addSubview:[wvTutorial view]];

    //[window addSubview:[wvTutorial view]];
   
    // Override point for customization after app launch   
    [window makeKeyAndVisible];
}

je voegt em aan je window toe zoals JWVD al zei. Maar je moet em aan je Tabbarcontroller toevoegen.

NickSmits 17-11-09 19:41

1 Bijlage(n)
Ik heb er meer dan een uur op lopen klooien, maar het wil nog niet erg vlotten. Ik krijg op dit moment drie foutmeldingen, ik heb (nog) niet (het juiste) een idee hoe ik het moet oplossen.

Wat ik nu heb gedaan is de Tab Bar app samen (proberen) te voegen met die tut, met de code van Whacko. Helaas!

Ik heb het project gezipt. Alvast veel dank voor diegene die mij kan vertellen wat ik verkeerd doe, en hoe het wel gaat werken!

Dank!

Malork 17-11-09 20:09

1 Bijlage(n)
Ik heb hem gefixed voor je.

Het was een beetje een rommeltje en er stond veel niet goed, dus ik zal even proberen uit te leggen wat er fout ging:

1: in OMT4AppDelegate.m:
Citaat:

self.wvTutorial = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
[tabBarController addSubview:[wvTutorial view]];

[window addSubview:[wvTutorial view]];
dit werkt niet, aangezien een tabBarController een Array verwacht van viewControllers.
als je gevorderd bent kun je handmatig tabs aanmaken en de array van viewcontrollers aan de UITabBarController geven, maar voorlopig kun je beter alles 'connecten' via Interface Builder.


2: in de MainWindow.xib had je bij tab 2 wel de juiste "Loaded from SecondView.xib" gedaan, maar je moest dan ook de class aangeven, te weten "SecondViewController". dit doe je in Interface Builder met command-4.
die tabbar laad de xib-file in,maar je moet ook aangeven welke class hij ervoor moet inladen; dat gaat niet vanzelf.

3: SecondView.xib
- hier had je als file's owner UIViewController staan; dit moest 'SecondViewController' zijn, aangezien deze class 'hoort' bij de SecondView.xib. SecondViewController is wel een subclass van de UIViewController,dat dan weer wel :).
- de UIWebView was niet gekoppeld aan webview (IBOutlet). je SecondViewController kon dus deze webView niet aansturen., nu wel.

...ik denk alleen dat je geen idee hebt wat ik allemaal verteld heb :( maar koop een goed boek (had je al besteld?). Ikzelf ben begonnen met http://www.bol.com/nl/p/boeken-engel...963/index.html (en ik had natuurlijk al enige programmeer-ervaring).
Als je dat boek van begin tot eind leest en doet, dan heb je het in no-time door en begrijp je ook waar en hoe je andere frameworks of truukjes kunt vinden om mee te experimenteren.

Oh en een van de lastigste dingen is om twee verschillende projecten in één project te stoppen; dat is voor een ervaren iemand al lastig, laat staan als je nieuw bent :).

NickSmits 17-11-09 20:24

Hartstikke bedankt! Morgen heb ik wat meer tijd dan zal ik alles is goed gaan bekijken wat je gedaan hebt. Ik heb enige PHP ervaring... misschien gaat dat iets schelen.

Ik heb inderdaad al een boek besteld, hetzelfde boek die jij noemde. Komt over een paar dagen uit Engeland. Nederlander he, €10 euro goedkoper :)

Bedankt!

Malork 17-11-09 20:29

hehe ja ik heb 'm ook via amazon.co.uk ;) maar daar heb je een creditcard voor nodig, en volgens mij hebben de meesten dat hier niet.

ik heb ook PHP ervaring, maar daarnaast (vroegah) nog wat Amiga assembler, SNES assembler en C64-assembler gedaan... wel wat anders maar de 'denkwijze' blijft hetzelfde.

succes ermee iig! probeer anders de 2 projecten naast elkaar te openen en te vergelijken.

NickSmits 17-11-09 20:37

Dat was ik ook idd van plan, ze naast elkaar te zetten en te vergelijken.

Ik heb nog niks opgezocht, maar weet jij misschien ook wat bepaald of een pagina in de UIWebView 'ingezoomd' opent, of gewoon de hele breedte?

Malork 17-11-09 20:50

ja, dat is (in jouw code):

Citaat:

[webView setScalesPageToFit:YES];
dus je code zou er bijvoorbeeld zo uit kunnen komen te zien in SecondViewController:
Citaat:

//Load the request in the UIWebView.
[webView setScalesPageToFit:YES];
[webView loadRequest:requestObj];
in Interface builder is het , als je de UIWebView aanklikt en dan command-1 doet, de 'scale pages to fit' aanvinken (makkelijke methode).

NickSmits 19-11-09 15:55

1 Bijlage(n)
Ik probeer weer een tut bij het bestaande deel te voegen, dat gaat, alleen ik heb weer een probleem wat ook eigenlijk speelde bij het webview probleem (denk ik).

Ik probeer deze tut toe te passen, deel 1 is goed gegaan, en dan werkte. Nu probeerde ik dit te doen, en dat gaat niet. Ik denk dat het probleem zit in het eerste stukje code van die pagina.

Ps. Ik had het boek vandaag verwacht, maar helaas niet gekomen.

Malork 21-11-09 02:03

je hebt er geen NavigationController in staan...

Als ik je een tip mag geven: stop met het proberen van projecten in elkaar te stoppen zonder dat je weet wat je doet. Het is al erg ingewikkeld om te doen als je WEL kennis ervan hebt namelijk.

JWVD 21-11-09 20:53

Het beste kan je eerst beginnen met het maken van simpele applicaties met Interface Builder. Als je dan de structuur van de UI onderdelen kent dan kan je het veel makkelijker combineren/zelf maken via code/IB.

Dreissen 27-11-09 13:01

Als je die 2e app af hebt zodat als je op het nieuws klikt ook het nieuws ziet post dan even de source ik zou deze graag eens willen bekijken ik zit namelijk met een probleem met mijn app dat waarschijnlijk ongeveer hetzelfde probleem is.

NickSmits 29-11-09 17:52

Om een nieuwe view te openen, dat is gelukt. Alleen de RSS-tekst op die view te krijgen is nog niet gelukt. Het staat weer even op een laag pitje... Maar als ik het ooit af heb, zal ik het posten ;)

Het boek is ondertussen aangekomen... zal er rustig aan beginnen. :)

Dreissen 29-11-09 19:45

Citaat:

Oorspronkelijk geplaatst door NickSmits (Bericht 388795)
Om een nieuwe view te openen, dat is gelukt. Alleen de RSS-tekst op die view te krijgen is nog niet gelukt. Het staat weer even op een laag pitje... Maar als ik het ooit af heb, zal ik het posten ;)

Het boek is ondertussen aangekomen... zal er rustig aan beginnen. :)

Zou je al willen posten wat je nu af hebt dan kijk ik zelf of ik er ook iets aan kan doen op de RSS-tekst erop te krijgen :)

Bedankt!

NickSmits 29-11-09 20:20

1 Bijlage(n)
Dit is wat ik heb. Succes ermee. Post je het ook weer even terug, mocht het gelukt zijn?

Dreissen 12-12-09 11:51

Citaat:

Oorspronkelijk geplaatst door NickSmits (Bericht 388855)
Dit is wat ik heb. Succes ermee. Post je het ook weer even terug, mocht het gelukt zijn?

Heb je nog iets mij lukt het niet.

NickSmits 12-12-09 18:50

1 Bijlage(n)
Het is me intussen wel gelukt. Ik moet alleen nog uitzoeken hoe ik er voor kan zorgen dat alle html tags (correct) verwerkt worden. Succes!

Dreissen 13-12-09 12:41

Citaat:

Oorspronkelijk geplaatst door NickSmits (Bericht 393099)
Het is me intussen wel gelukt. Ik moet alleen nog uitzoeken hoe ik er voor kan zorgen dat alle html tags (correct) verwerkt worden. Succes!

Jup hij werkt.
Wat wel raar is als ik een nieuwe view wil toevoegen hij hem niet laad?
Waar kan dit aan liggen.

Dreissen 29-12-09 16:46

Is het al gelukt de HTML tags juist te laten weergeven?

NickSmits 31-12-09 11:48

Nog niet, maar moet eerlijk zeggen dat ik niet meer echt hard gezocht heb op die HTML tags. Ik ben nu rustig aan begonnen in een boek.

Maar zou je een hint kunnen geven?

Dreissen 02-01-10 17:40

Ik heb ook verschillende dingen geprobeerd en gekeken naar andere rss readers maar ik vind het niet helaas.
Laat het weten als je het hebt. ik zoek nog even door

Frog 02-01-10 18:19

Ik heb nooit zoiets gedaan, maar ik zou even zoeken naar NSXMLParser. Dan vind je al heel veel nuttige websites.

Dreissen 03-02-10 19:44

Is het nog gelukt :P

Frog 03-02-10 20:10

Citaat:

Oorspronkelijk geplaatst door Dreissen (Bericht 412306)
Is het nog gelukt :P

Ben je daar echt nog steeds op aan het wachten! :eek:

Kom op, maak zelf wat. Doe zelf je best als je iets graag wilt maken. :)

Dreissen 08-02-10 20:14

Citaat:

Oorspronkelijk geplaatst door Frog (Bericht 412316)
Ben je daar echt nog steeds op aan het wachten! :eek:

Kom op, maak zelf wat. Doe zelf je best als je iets graag wilt maken. :)

Ik mag het toch wel vragen?

Frog 09-02-10 17:10

Citaat:

Oorspronkelijk geplaatst door Dreissen (Bericht 414294)
Ik mag het toch wel vragen?

Natuurlijk mag je het wel vragen, maar zo moeilijk is het ook weer niet. Als je je best had gedaan denk ik dat je het al wel had kunnen maken. :)

Dreissen 21-02-10 13:19

Dan doe ik blijkbaar niet mijn best, ik krijg het niet voor elkaar!

Frog 28-02-10 16:43

Heb je al naar de XMLParser sample code gekeken?

Ik heb laatst trouwens een XML-file geparset voor een mac-app met NSXMLParser. Het werkte binnen 2 uur.

Dreissen 28-02-10 18:50

Citaat:

Oorspronkelijk geplaatst door Frog (Bericht 421816)
Heb je al naar de XMLParser sample code gekeken?

Ik heb laatst trouwens een XML-file geparset voor een mac-app met NSXMLParser. Het werkte binnen 2 uur.

Heb ik allemaal gedaan, maar ik krijg die HTML tags maar niet goed.

Frog 28-02-10 21:05

Raar..., ik ben benieuwd wat je fout doet...

Doe de volgende dingen:
  • Maak een global variable
    NSString *currentItem;
  • Maak de parser en parse
    Code:

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    [parser setDelegate:self];
    [parser parse];

  • Herken wanneer een nieuwe tag geopend wordt en bewaar de naam van de tag.
    Code:

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
        if ([elementName isEqualToString:@"item"]) {
              questionParsing = [[NSMutableDictionary alloc] init];
        }
        currentItem = elementName;
    }

  • Controleer of de tag gelijk is aan de tag die je wilt hebben, zo ja, bewaar de inhoud.
    Code:

    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
        if ([currentItem isEqualToString:@"voorbeeld"]) {
              // Bewaar de string
        }
    }

  • Doe (indien nodig) iets wanneer de tag is gesloten.
    Code:

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
        if ([elementName isEqualToString:@"voorbeeld"]) {
              // Doe iets
        }
    }


Hopelijk is dit duidelijk en werkt het goed. Deze code heb ik niet op de iPhone getest, maar wel op de mac. Daar werkt hij goed, op een foutmelding na die ik nog niet weg heb gekregen. Die foutmelding is: "Class 'FileFormats' does not implement the 'NSXMLParserDelegate' protocol". Als iemand weet hoe je die foutmelding weg krijgt hoor ik het graag.

Whacko 01-03-10 16:56

Citaat:

Oorspronkelijk geplaatst door Frog (Bericht 421909)

Hopelijk is dit duidelijk en werkt het goed. Deze code heb ik niet op de iPhone getest, maar wel op de mac. Daar werkt hij goed, op een foutmelding na die ik nog niet weg heb gekregen. Die foutmelding is: "Class 'FileFormats' does not implement the 'NSXMLParserDelegate' protocol". Als iemand weet hoe je die foutmelding weg krijgt hoor ik het graag.

je doet:
[parser setDelegate:self];

blijkbaar heb je in de definitie van die class dus niet opgegeven dat ie het NSXMLParserDelegate protocol implementeert.
Dus in je header file even dit zetten:

@interface FileFormats : NSObject <NSXMLParserDelegate>

Frog 01-03-10 18:11

Citaat:

Oorspronkelijk geplaatst door Whacko (Bericht 422167)
je doet:
[parser setDelegate:self];

blijkbaar heb je in de definitie van die class dus niet opgegeven dat ie het NSXMLParserDelegate protocol implementeert.
Dus in je header file even dit zetten:

@interface FileFormats : NSObject <NSXMLParserDelegate>

Je hebt gelijk, een domme fout van mij.


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