iOS
UISplitViewController
खोज…
टिप्पणियों
UISplitViewController
UITabViewController
, UINavigationController
तरह एक कंटेनर वर्ग है। यह मुख्य दृश्य को दो व्यू कंट्रोलर मास्टर व्यू कॉन्ट्रोलर (प्राइमरी व्यू कॉन्ट्रोलर) और डिटेल व्यू कॉन्ट्रोलर (सेकेंडरी व्यू कॉन्ट्रोलर) में अलग करता है। हम दो व्यू कंट्रोलर के साथ एक सरणी भेज सकते हैं और Apple आपके आवेदन के लिए एक rootviewcontroller के रूप में UISplitViewController
की सिफारिश करता है। NSNotificationCenter
उपयोग करने वाले NSNotificationCenter
बीच बातचीत करने के लिए।
उद्देश्य सी में डेलिगेट्स का उपयोग करके मास्टर और डिटेल व्यू इंटरैक्शन
UISplitViewController
अपने आवेदन का UISplitViewController
होना चाहिए।
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;
}
बस UISplitViewController
लिए एक ऑब्जेक्ट UISplitViewController
और उस UISplitViewController
को आपके एप्लिकेशन के लिए rootviewcontroller के रूप में सेट करें।
SplitViewController.h
#import <UIKit/UIKit.h>
#import "MasterViewController.h"
#import "DetailViewController.h"
@interface ViewController : UISplitViewController
{
DetailViewController *detailVC;
MasterViewController *masterVC;
NSMutableArray *array;
}
@end
MasterViewController
हमेशा डिवाइस के बाईं ओर होता है जिसे आप UISplitViewCOntroller
डेलिगेट विधियों में चौड़ाई सेट कर सकते हैं और DetailViewController
एप्लिकेशन के दाईं ओर होता है
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;
}
बनाया गया मास्टर और विस्तार ViewControllers एक सरणी जो करने के लिए सेट कर दिया जाता से जुड़ जाते हैं self.viewControllers
में UISplitViewController
। self.preferredDisplayMode
मास्टर और DetailViewController
Apple डॉक्यूमेंटेशन को DetailViewController
प्रदर्शन के लिए सेट किया गया मोड है। self.presentsWithGesture
को प्रदर्शित करने के लिए स्वाइप जेस्चर को सक्षम 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
DetailViewDelegate
साथ एक DetailViewDelegate
प्रतिनिधि बनाएं sendSelectedNavController:(UIViewController *)viewController
को विस्तार से DetailViewcontroller
लिए UIViewController
भेजने की विधि। फिर MasterViewController
में MasterViewController
में टेबलव्यू है। ViewControllerArray में सभी UIViewControllers
होते हैं, 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
कुछ UIViewControllers
बनाएं और इसे एक सरणी में जोड़ा। तालिका दृश्य को प्रारंभ किया जाता है, फिर didSelectRowAtIndexPath
पद्धति पर मैं एक UIViewController
को पैरामीटर के रूप में संबंधित UIViewController
साथ DetailViewController
का उपयोग करके detailDelegate
के लिए detailDelegate
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
यहां के सारे दृश्य हटाने के साथ घोषित किया जाता है DetailViewController
और जोड़ने से पारित कर दिया UIViewController
से MasterViewController
एप्लिकेशन के कुछ स्क्रीन शॉट्स जोड़ना
एप्लिकेशन लॉन्च करने पर हमें MasterViewController
नहीं मिलता है क्योंकि हमने स्क्रीन पर स्वाइप करने पर ऑटोमैटिक के रूप में preferredDisplayMode
MasterViewController
दिया है जो हमें नीचे दी गई इमेज में संलग्न के रूप में MasterViewController
मिलता है, लेकिन लैंडस्केप मोड में हमें MasterViewController
और DetailViewController
MasterViewController
दोनों DetailViewController
लैंडस्केप ओरिएंटेशन पर