Gleiches Menü auf mehreren Seiten (tabbar + swipe)

  • Gleiches Menü auf mehreren Seiten (tabbar + swipe)

    Hallo, Ich bin wieder am basteln und muss jetzt mal eine Frage loswerden, die ich mir schon seit langem stelle.
    Ich habe ein ein Menü (TabBar mit 5 Punkten) und wenn ich eins anklicke, soll sich die jeweilige View dazu öffnen.
    Dazu möchte ich aber noch swipe gestures haben. (wenn ich von links wische soll sich Menü 6 öffnen, von oben Menü 7 und rechts Menü 8)
    Wie implementiert man das am besten?
    Ich würde ja gerne den tabbar Controller benutzen, aber ich glaube das geht nicht, da ich auf jeder view oben das gleiche anzeige und somit 8 mal kopieren müsste.
    MUSS ich da die Container view verwenden oder gibt es einen anderen Weg? (weil ich nicht os der Fan von der container view bin :/ ).

    Würde mich sehr über tipps freuen.
  • Ich habe im meine Mainview eine View eingefügt (viewBackground). Dann in die Klick Funktion(en) folgendes Einfügen:

    Quellcode

    1. - (void)klick {
    2. UIViewController *newViewController = [[UIViewController alloc] init];
    3. newViewController = [[UIStoryboard storyboardWithName:@"Storyboard_iPhone4" bundle:nil] instantiateViewControllerWithIdentifier:@"mein Identifier des neuen Viewcontrollers"];
    4. UIView *newView = [[UIView alloc] init];
    5. newView = newViewController.view;
    6. newView.tag = 11;
    7. //Fall Animation gewollt ist, die View zuerst verschieben
    8. //[newView setFrame:CGRectMake(_viewBackground.frame.size.width, 0, _viewBackground.frame.size.width, _viewBackground.frame.size.height)];
    9. [self.viewBackground addSubview:newView];
    10. //und dann Animation ausführen
    11. UIView animateWithDuration:0.25 animations:^{
    12. [newView setFrame:CGRectMake(0, 0, _viewBackground.frame.size.width, _viewBackground.frame.size.height)];
    13. }
    14. completion:^(BOOL finished){
    15. [self deleteAllSubviewsWithoutTag:newView.tag];
    16. }];
    17. }
    18. }
    19. - (void)deleteAllSubviewsWithoutTag:(int)inTag {
    20. for (UIView *subview in [_viewBackground subviews]) {
    21. if (subview.tag != inTag) {
    22. [subview removeFromSuperview];
    23. }
    24. }
    25. }
    Alles anzeigen


    Dadurch kannst du im Storyboard deine ViewController schon vorbasteln und bindest die dann mit dem entsprechendem Identifier ein.
    Ich wette dass es da noch eine Elegantere Lösung gibt, aber bei mir geht es.
  • OK Ich dachte das die Lösung gut ist, aber da gibt es ein riesen problem!!!
    Hier nochmal der Code nur vereinfacht:

    Quellcode

    1. ​- (void)viewDidLoad
    2. {
    3. [super viewDidLoad];
    4. // Do any additional setup after loading the view, typically from a nib.
    5. UIButton *button = [[UIButton alloc]
    6. initWithFrame:CGRectMake(100, 100, 100, 100)];
    7. [button addTarget:self action:@selector(view2) forControlEvents:UIControlEventTouchUpInside];
    8. [self.view addSubview:button];
    9. }
    10. - (void)view2 {
    11. UIViewController *newViewController = [[UIViewController alloc] init];
    12. newViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"view2"];
    13. UIView *newView = newViewController.view;
    14. [newView setFrame:CGRectMake(0, 0, 320, 400)];
    15. [self.view addSubview:newView];
    16. }
    Alles anzeigen


    ​Ich komme auf die view2, aber wenn ich da ein Button setzte und eine action Methode zuweise, dann stürzt er ab.
    Wieso kann man das so nicht machen und was wäre der "richtige" Weg?
  • SpeedyBrainy schrieb:

    Ich komme auf die view2, aber wenn ich da ein Button setzte und eine action Methode zuweise, dann stürzt er ab.

    Mit welcher Meldung? Was steht in der Konsole?

    SpeedyBrainy schrieb:

    Wieso kann man das so nicht machen und was wäre der "richtige" Weg?

    Warum legst Du nicht alle Views im Storyboard an?
    Warum initialisierst Du newViewController mit einem Wert, den Du in der nächsten Anweisung direkt wieder wegschmeisst?

    BTW: Feste Größen und Positionen sind in der Regel eine sehr schlechte Idee. Die einzige Klasse, die in einer Viewhierarchie rumfummeln sollte, ist der Viewcontroller, dem die Hierarchie gehört.
    „Meine Komplikation hatte eine Komplikation.“
  • Ich habe alle views im storyboard und greife auf die mit der storyboardID zu.
    Das Problem ist, dass ich ganz unten und ganz oben 2 Leistenhabe, die immer zu sehen sein müssen (auf der MainView).
    Nur der mittlere Inhalt der MainView muss sich halt ändern und ich habe in der MainView eine View, welche ich dann einfach "überschreibe".

    Fehlermeldungen kommen keine, nur

    Quellcode

    1. ​(lldb)
  • Ich habe folgendes in die viewWillAppear und die Action Methode eingefügt:

    Quellcode

    1. ​id theDelegate = [[UIApplication sharedApplication] delegate];
    2. NSLog(@"intValue: %d", [theDelegate intValue]);


    Ausgegeben wird intValue: 149135936, was ja nicht wirklich viel aussagt.
    ABER in der View, die ich aufrufe wird es nicht ausgeführt, auch wenn die View angezeigt wird.

    Aber das einzige was ich bekomme ist jetzt eine Endlosschleife wo er immer bei dem Zustand bleibt:

    Quellcode

    1. ​0x15730e6: cmpl $0x0, (%eax)