iOS
UISplitViewController
수색…
비고
UISplitViewController
는 UITabViewController
, UINavigationController
와 같은 컨테이너 클래스입니다. 기본보기를 두 개의보기 컨트롤러 인 masterViewController (PrimaryViewController)와 detailViewController (SecondaryViewController)로 구분합니다. 우리는 두 개의 뷰 컨트롤러를 가진 배열을 보낼 수 있습니다. Apple은 여러분의 어플리케이션을위한 rootview 컨트롤러로 UISplitViewController
를 UISplitViewController
것을 권장합니다. 뷰 컨트롤러 사이에서 상호 작용하려면 NSNotificationCenter
사용합니다.
목표 C에서 대리인을 사용하여 마스터 및 세부 정보보기 상호 작용
UISplitViewController
는 응용 프로그램의 rootViewController 여야합니다.
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
대한 객체를 만들고 해당 viewcontroller를 응용 프로그램의 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;
}
생성 된 마스터 및 세부 ViewController는 UISplitViewController
self.viewControllers
로 설정된 배열에 추가됩니다. self.preferredDisplayMode
는 DisplayMode에 대한 마스터 및 DetailViewController
Apple Documentation을 표시하기 위해 설정된 모드입니다. self.presentsWithGesture
는 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
에 위임 sendSelectedNavController:(UIViewController *)viewController
전송을위한 방법 UIViewController
받는 DetailViewcontroller
. 그런 다음 MasterViewController
에서 mainTableView는 왼쪽의 tableview입니다. viewControllerArray는 DetailViewController
표시되어야하는 모든 UIViewControllers
를 포함합니다.
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
함께 DetailViewController
사용하여 detailDelegate
UIViewController
보낼
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
얻지 MasterViewController
때문에 preferredDisplayMode
에 자동으로 화면을 스 와이프 할 때 MasterViewController
가 아래 이미지에 첨부 된 것처럼 표시되었지만 Landscape 모드에서는 MasterViewController
와 DetailViewController
모두 얻 DetailViewController
가로 방향