수색…


비고

UISplitViewControllerUITabViewController , UINavigationController 와 같은 컨테이너 클래스입니다. 기본보기를 두 개의보기 컨트롤러 인 masterViewController (PrimaryViewController)와 detailViewController (SecondaryViewController)로 구분합니다. 우리는 두 개의 뷰 컨트롤러를 가진 배열을 보낼 수 있습니다. Apple은 여러분의 어플리케이션을위한 rootview 컨트롤러로 UISplitViewControllerUISplitViewController 것을 권장합니다. 뷰 컨트롤러 사이에서 상호 작용하려면 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.preferredDisplayModeDisplayMode에 대한 마스터 및 DetailViewController Apple Documentation을 표시하기 위해 설정된 모드입니다. self.presentsWithGestureself.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 모드에서는 MasterViewControllerDetailViewController 모두 얻 DetailViewController

여기에 이미지 설명을 입력하십시오.

여기에 이미지 설명을 입력하십시오.

가로 방향

여기에 이미지 설명을 입력하십시오. 여기에 이미지 설명을 입력하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow