Zoeken…


Opmerkingen

UISplitViewController is een containerklasse zoals UITabViewController , UINavigationController . Het scheidt de hoofdweergave in twee View Controllers masterViewController (PrimaryViewController) en detailViewController (SecondaryViewController). we kunnen een array met twee UISplitViewController verzenden en Apple beveelt aan naar UISplitViewController als rootviewcontroller voor uw toepassing. Voor interactie tussen de viewcontrolers gebruik ik NSNotificationCenter .

Hoofd- en detailweergave-interactie met gebruik van gedelegeerden in doelstelling C

UISplitViewController moet de rootViewController van uw toepassing zijn.

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;
}

Maak gewoon een object voor de UISplitViewController en stel die viewcontroller in als rootviewcontroller voor uw toepassing.

SplitViewController.h

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

MasterViewController bevindt zich altijd aan de linkerkant van het apparaat. U kunt de breedte instellen in UISplitViewCOntroller delegatiemethoden en DetailViewController bevindt zich aan de rechterkant van de toepassing

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;
}

Aangemaakte master en detail ViewControllers worden toegevoegd aan een array die is ingesteld op self.viewControllers in UISplitViewController . self.preferredDisplayMode is de modus die is ingesteld voor het weergeven van master- en DetailViewController Apple-documentatie voor DisplayMode . self.presentsWithGesture maakt swipe-bewegingen mogelijk voor weergave van 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

Maak een DetailViewDelegate afgevaardigde met sendSelectedNavController:(UIViewController *)viewController methode voor het verzenden van de UIViewController naar de DetailViewcontroller . Dan is in MasterViewController de mainTableView de tableview aan de linkerkant. De viewControllerArray bevat alle UIViewControllers die moeten worden weergegeven 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

Maak enkele UIViewControllers en UIViewControllers deze toe aan een array. De tabelweergave wordt geïnitialiseerd en vervolgens op de methode didSelectRowAtIndexPath stuur ik een UIViewController naar de DetailViewController met detailDelegate met de overeenkomstige UIViewController in array als parameter

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 wordt hier gedeclareerd met het verwijderen van alle views in de DetailViewController en het toevoegen van de doorgegeven UIViewController uit de MasterViewController

Enkele schermafbeeldingen van de applicatie toevoegen voer hier de afbeeldingsbeschrijving in

Bij het starten van de applicatie krijgen we MasterViewController omdat we de preferredDisplayMode MasterViewController als automatisch hebben gegeven bij het vegen van het scherm, krijgen we de MasterViewController zoals bijgevoegd in de onderstaande afbeelding, maar in de DetailViewController modus krijgen we zowel de MasterViewController en DetailViewController

voer hier de afbeeldingsbeschrijving in

voer hier de afbeeldingsbeschrijving in

over landschapsoriëntatie

voer hier de afbeeldingsbeschrijving in voer hier de afbeeldingsbeschrijving in



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow