Frage

Ich bin in einer solchen Situation, dass ich mit einem Tab-basierte Anwendung starten müssen und dass ich brauche eine geteilte Ansicht für eine oder mehrere Registerkarten. Aber es scheint, dass Controller-Objekt geteilte Ansicht kann nicht in die TabBarController hinzugefügt werden. (Obwohl Tabbar Objekt kann zum splitviewcontroller hinzugefügt werden).

Das Problem kann gesehen otherways werden: Ich habe ein Vollbild im linken Teil I eine Tabellenansicht, wenn jede Zeile in der Tabelle ausgewählt wird, ein popover kommen sollte diese Zeile zeigt. Nun, wenn jede Reihe in der popover die Zeilen in diesem popover ausgewählt kommt auf der linken Seite unter der ausgewählten Zeile (nur diese Zeile wäre sichtbar) und ein anderer popover kommt aus der ausgewählten Zeile aus. (Brotkrumen-Navigation-Typ)

Ich glaube, ich bin klar, was ich erklärt. Also Jungs irgendwelche Ideen oder Workarounds?

Bitte lassen Sie mich wissen, wenn ich nicht in meiner Frage bin löschen.

Danke,

Madhup

War es hilfreich?

Lösung 3

habe ich eine Beispielanwendung. und fanden wir es tun können programmatisch wie:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

        NSMutableArray *array = [NSMutableArray array];

        NSMutableArray *tabArray = [NSMutableArray array]; 

        UISplitViewController *splitViewConntroller = [[UISplitViewController alloc] init];

        MainViewController *viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];




        [splitViewConntroller setViewControllers:array];

        [tabArray addObject:splitViewConntroller];

        [splitViewConntroller release];

        array = [NSMutableArray array];

        splitViewConntroller = [[UISplitViewController alloc] init];

        viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        [splitViewConntroller setViewControllers:array];

        [tabArray addObject:splitViewConntroller];

        [splitViewConntroller release];

        // Add the tab bar controller's current view as a subview of the window
        [tabBarController setViewControllers:tabArray];

        [window addSubview:tabBarController.view];
        [window makeKeyAndVisible];

        return YES;
    }

Hope, das hilft.

Andere Tipps

den Interface Builder Erstellen Sie mit Hilfe eines geteilten View-Controller und eine Tab-Leiste Controller und verknüpfen sie mit Ihren Filialen:

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;

In AppDelegate didFinishLaunchingWithOption, ordnen Sie Ihren Split-View-Controller auf die Tab-Leiste Controller:

splitViewController.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Title" image:nil tag:0] autorelease];
NSArray *controllers = [NSArray arrayWithObjects:splitViewController,  /* other controllers go here */ nil];
tabBarController.viewControllers = controllers;
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

Dies wird eine Tab-Leiste Controller erstellen (mit nur 1 Tab in diesem Fall), die in allen Orientierungen korrekt angezeigt wird.

Ich habe für die UISplitViewController auf eine Unterklasse geschrieben, die für Änderungen an der Geräteorientierung hören und orientieren sich entsprechend. Mit dieser Klasse kann ich nun geteilte Ansichten innerhalb eines UITabBarController platzieren und jede geteilte Ansicht verhält sich korrekt bei einer Drehung, auch wenn es nicht der vorderste Registerkarte ist. Ich habe dies erfolgreich im Einsatz in TexLege und es wurde für den Einsatz in dem App Store zugelassen, aber die Leistung kann variieren. Bitte beachten Sie das Repository auf Github.

Fühlen Sie sich frei, es zu gabeln und zu ändern, und ich bin zu hören, Kommentare immer interessiert (oder Beschwerden) darüber. https://github.com/grgcombs/IntelligentSplitViewController

Um ein TabBarController zu lassen als Master-Ansicht für splitviewcontroller erscheinen Sie umschreiben sollte TabBarController, so dass sie unterstützen oder Orientierungen (so sagen, eine Kategorie für die Klasse UITabBarController verwenden)

Siehe mein Beitrag über Split View-Controller an eine bestehende Tableiste Schnittstelle Nachrüstung:

Ich habe eine UITabBarController Unterklasse, die richtig die Rotation Nachrichten an alle UISplitViewControllers pflanzt es enthält. Dies hält den richtigen internen Zustand der UISplitViewControllers. Allerdings ist einer der SplitViewController Delegatmethoden nicht aufgerufen, wenn die SplitViewController nicht sichtbar ist, so dass ich für diese in der Detailansicht Controller viewWillAppear Verfahren berücksichtigen. Ich habe diese Werke in iOS5.0 bestätigt - iOS6.1

OSTabBarController.m

#import "OSTabBarController.h"

@implementation OSTabBarController

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    for(UIViewController *targetController in self.viewControllers){
        if(targetController != self.selectedViewController && [targetController isKindOfClass:[UISplitViewController class]]){
            [targetController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
        }
    }
}

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    for(UIViewController *targetController in self.viewControllers){
        if(targetController != self.selectedViewController && [targetController isKindOfClass:[UISplitViewController class]]){
            [targetController didRotateFromInterfaceOrientation:fromInterfaceOrientation];
        }
    }
}

@end

DetailViewController

@implementation OSDetailViewController

-(void)viewWillAppear:(BOOL)animated{
    //the splitViewController:willHideViewController:withBarButtonItem:forPopoverController: may not have been called
    if(!UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){
        self.navigationItem.leftBarButtonItem = nil;
    }
}

#pragma mark - UISplitViewControllerDelegate Methods

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
{
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];

}

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
}

@end

Beachten Sie, dass OS 3.2 hat nicht bieten angemessene Unterstützung für eine SPLITVIEW- als Tabbar Ansicht.

Sie können es machen „Arbeit“, aber es wird Fehler haben - die größte ist, dass eine Orientierungsänderung auf eine andere Registerkarte Ansicht vorgenommen werden oft nicht auf die SPLITVIEW- Tabansicht propagieren richtig, die Ansicht gehen verrückt zu machen, wenn Sie es zurück (linke Seitenansicht ist der Bildschirm über oder barbutton Artikel fehlt, etc.).

Ich habe zu dem Schluss gekommen, dass ich meine eigenen SPLITVIEW- zur Verwendung in einem TabBarController erstellen wegen dieses Problems.

Ich hatte Gerüchte gehört, dass Apple wurde an einer Lösung arbeiten, aber es ist Monate her, jetzt und kein iPad OS-Updates aufgetreten ist -. Vielleicht OS 4 für das iPad wird es richten

Sie können IB verwenden, um Build tabtab und ändern Tabs splitviewcontroller.

-(void) makeSplitViewController {
NSMutableArray *controllers = [NSMutableArray arrayWithArray:tabBarController.viewControllers];
int index = 0;

for (UIViewController *controller in tabBarController.viewControllers) {
    if ([controller.tabBarItem.title isEqualToString:@"Stock"]) {
        stockDetailController = [[StockDetailController alloc] initWithNibName:@"StockDetailController" bundle:nil];

        stockMasterController = [[StockMasterController alloc] initWithStyle:UITableViewStylePlain]; 
        stockMasterController.navigationItem.title = date;
        stockMasterController.stockDetailController = stockDetailController;

        UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:stockMasterController] autorelease];

        splitViewController = [[UISplitViewController alloc] init];
        splitViewController.tabBarItem = controller.tabBarItem;
        splitViewController.viewControllers = [NSArray arrayWithObjects:nav, stockDetailController, nil];
        splitViewController.delegate = stockDetailController;

        [controllers replaceObjectAtIndex:index withObject:splitViewController];
    }

    index++;
}

tabBarController.viewControllers = controllers;

}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top