Ricerca…


Osservazioni

UISplitViewController è una classe contenitore come UITabViewController , UINavigationController . Separa la vista principale in due controllori di vista masterViewController (PrimaryViewController) e detailViewController (SecondaryViewController). possiamo inviare un array con due controller di visualizzazione e Apple consiglia a UISplitViewController come rootviewcontroller per la vostra applicazione. Per interagire tra i viewcontrolers uso NSNotificationCenter .

Interazione Master e Detail View utilizzando i delegati nell'obiettivo C

UISplitViewController deve essere il rootViewController dell'applicazione.

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]
self.window.backgroundColor = [UIColor blackColor];
[self.window makeKeyAndVisible];
self.window.clipsToBounds = YES;
SplitViewController *spView = [[SplitViewController alloc]init];
self.window.rootViewController = spView;
[self.window makeKeyAndVisible];
return YES;
}

Basta creare un oggetto per UISplitViewController e impostare quel viewcontroller come rootviewcontroller per la propria applicazione.

SplitViewController.h

#import <UIKit/UIKit.h>
#import "MasterViewController.h"
#import "DetailViewController.h"
@interface ViewController : UISplitViewController
{
DetailViewController *detailVC;
MasterViewController *masterVC;
NSMutableArray *array;
}
@end

MasterViewController trova sempre sul lato sinistro del dispositivo, è possibile impostare la larghezza nei metodi delegati UISplitViewCOntroller e DetailViewController trova sul lato destro dell'applicazione

SplitViewController.m

#import "ViewController.h"
#define ANIMATION_LENGTH 0.3
@interface ViewController ()
@end

@implementation ViewController
- (void)viewDidLoad 
{
[super viewDidLoad];
masterVC = [[MasterViewController alloc]init];
detailVC = [[DetailViewController alloc]init];
[masterVC setDetailDelegate:(id)detailVC];
NSArray *vcArray = [NSArray arrayWithObjects:masterVC, detailVC, nil];
self.preferredDisplayMode = UISplitViewControllerDisplayModeAutomatic;
self.viewControllers = vcArray;
self.delegate = (id)self;
self.presentsWithGesture = YES;
}

Created master and detail ViewControllers vengono aggiunti a un array impostato su self.viewControllers in UISplitViewController . self.preferredDisplayMode è la modalità impostata per la visualizzazione della documentazione Apple e DetailViewController Apple per DisplayMode . self.presentsWithGesture abilita il gesto di scorrimento per la visualizzazione di MasterViewcontroller

MasterViewController.h

#import <UIKit/UIKit.h>

@protocol DetailViewDelegate <NSObject>
@required
- (void)sendSelectedNavController:(UIViewController *)viewController;
@end

@interface MasterViewController : UIViewController
{
    UITableView *mainTableView;
    NSMutableArray *viewControllerArray;
}
@property (nonatomic, retain) id<DetailViewDelegate> detailDelegate; 
@end

Creare un DetailViewDelegate delegato con sendSelectedNavController:(UIViewController *)viewController metodo per inviare UIViewController al DetailViewcontroller . Quindi in MasterViewController il mainTableView è il tableview nel lato sinistro. ViewControllerArray contiene tutti i UIViewControllers che devono essere visualizzati in DetailViewController

MasterViewController.m

#import "MasterViewController.h"

@implementation MasterViewController
@synthesize detailDelegate;

-(void)viewDidLoad
{
[super viewDidLoad];

UIViewController *dashBoardVC = [[UIViewController alloc]init];
[dashBoardVC.view setBackgroundColor:[UIColor redColor]];
UIViewController *inventVC = [[UIViewController alloc]init];
[inventVC.view setBackgroundColor:[UIColor whiteColor]];
UIViewController *alarmVC = [[UIViewController alloc]init];
[alarmVC.view setBackgroundColor: [UIColor purpleColor]];
UIViewController *scanDeviceVC = [[UIViewController alloc]init];
[scanDeviceVC.view setBackgroundColor:[UIColor cyanColor]];
UIViewController *serverDetailVC = [[UIViewController alloc]init];
[serverDetailVC.view setBackgroundColor: [UIColor whiteColor]];
viewControllerArray = [[NSMutableArray alloc]initWithObjects:dashBoardVC,inventVC,alarmVC,scanDeviceVC,serverDetailVC,nil];
mainTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 50,self.view.frame.size.width, self.view.frame.size.height-50) style:UITableViewStylePlain];
[mainTableView setDelegate:(id)self];
[mainTableView setDataSource:(id)self];
[mainTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[mainTableView setScrollsToTop:NO];
[self.view addSubview:mainTableView];
}

- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 100;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:    (NSInteger)section
{
    return [viewControllerArray count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;    //count of section
}

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellId = [NSString stringWithFormat:@"Cell%li%ld",(long)indexPath.section,(long)indexPath.row];
UITableViewCell *cell =[tableView   dequeueReusableCellWithIdentifier:cellId];

if (cell == nil)
{
   cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
[cell.contentView setBackgroundColor:[UIColor redColor]];
cell.textLabel.text =[NSString stringWithFormat:@"My VC at index %ld",(long)indexPath.row];
return cell;
}

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [detailDelegate sendSelectedNavController:[viewControllerArray objectAtIndex:indexPath.row]];
}

@end

Creare alcuni UIViewControllers e aggiungerlo a un array. La vista Tabella viene inizializzato allora didSelectRowAtIndexPath metodo mando un UIViewController al DetailViewController utilizzando detailDelegate con il corrispondente UIViewController nella matrice come parametro

DetailViewController.h

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController<UICollectionViewDelegate>
{
    UIViewController *tempNav;
}
@end

DetailViewController.m

#import "DetailViewController.h"

@implementation DetailViewController
-(void)viewDidLoad
{
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor whiteColor]];
}
-(void)sendSelectedNavController:(UIViewController *)navController
{
    NSArray *viewsToRemove = [self.view subviews];
    for (UIView *v in viewsToRemove) {
        [v removeFromSuperview];
    }
    tempNav = navController;
    [self.view addSubview:tempNav.view];
}
@end

sendSelectedNavController è dichiarato qui con la rimozione di tutte le viste in DetailViewController e l'aggiunta di UIViewController passato da MasterViewController

Aggiunta di alcune schermate dell'applicazione inserisci la descrizione dell'immagine qui

Al momento dell'avvio dell'applicazione non otteniamo MasterViewController poiché abbiamo dato il preferredDisplayMode DisplayMode come automatico per lo scorrimento dello schermo otteniamo il MasterViewController come allegato nell'immagine sottostante, ma in modalità Landscape otteniamo sia il MasterViewController che il DetailViewController

inserisci la descrizione dell'immagine qui

inserisci la descrizione dell'immagine qui

sull'orientamento del paesaggio

inserisci la descrizione dell'immagine qui inserisci la descrizione dell'immagine qui



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow