2017-05-19 2 views
0

나는 2 개의 다른 컨트롤러에 이미 배치 된 기능을 구성하는 뷰를 만들고 있습니다. 하이브리드의 종류.보기에 여러 컨트롤러에 액세스 하시겠습니까?

구조적으로이 접근 방식을 어떻게 처리 할까 궁금한가요? 기존 뷰는 셀렉터와 몇 명의 델리게이트를 사용하여 컨트롤러에 전송하지만, 새로운 뷰는 이상적으로 몇 가지 컨트롤러 기능에 대한 액세스를 원합니다. 컨트롤러에 파이어 셀렉터를 연결할 수없는 이유는 무엇입니까?

예를 들어 현재 뷰 기능 사용 (self.viewController을 사용할 수 있도록) :

[self.viewController performSelector:@selector(getParBusFader:) withObject:[NSNumber numberWithInteger:_busOffset - 1]]; 

난 내 새로운 뷰에서이 액세스하고 싶었 것처럼이있다 나는이 self.viewController를 사용하지 못할 경우 다른 컨트롤러가 다른 기능을 사용하고 있습니다.

다른 솔루션을 다른 컨트롤러로 보내고 중복을 방지 할 수있는 솔루션은 무엇입니까?

컨트롤러의 인스턴스를 로컬로 인스턴스화하고 그런 식으로 액세스 할 수 있습니까?

건배 컨테이너 및 자식보기 컨트롤러에 최대 읽기

답변

0

. 원하는 경우 "자녀"를 여러 개 추가 할 수 있습니다. Interface Builder를 사용할 때 UIContainerView 개체를 추가하면 설정이 자동으로 처리됩니다.

// 
// QuickTestViewController.h 
// 

#import <UIKit/UIKit.h> 

#import "FirstChildViewController.h" 

@interface QuickTestViewController : UIViewController 

@property (strong, nonatomic) FirstChildViewController *fcVC; 

@end 

// 
// QuickTestViewController.m 
// 

#import "QuickTestViewController.h" 

@interface QuickTestViewController() 

@end 

@implementation QuickTestViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // instantiate a FirstChildViewController 
    _fcVC = [[FirstChildViewController alloc] init]; 

    // add it as a Child View Controller 
    [self addChildViewController:_fcVC]; 

    // configure its view and add the view to self.view 
    _fcVC.view.frame = CGRectMake(10, 50, 200, 100); 
    _fcVC.view.backgroundColor = [UIColor blueColor]; 
    [self.view addSubview:_fcVC.view]; 

    // tell FirstChildViewController we're finished adding it 
    [_fcVC didMoveToParentViewController:self]; 

} 

- (IBAction)btnTapped:(id)sender { 
    // call a method in FirstChildViewController 
    [_fcVC performSelector:@selector(getParBusFader:) withObject:[NSNumber numberWithInteger:5]]; 
} 

@end 

// 
// FirstChildViewController.h 
// 

#import <UIKit/UIKit.h> 

@interface FirstChildViewController : UIViewController 

- (void)getParBusFader:(NSNumber *)x; 

@end 

// 
// FirstChildViewController.m 
// 

#import "FirstChildViewController.h" 

@interface FirstChildViewController() 

@end 

@implementation FirstChildViewController 

- (void)getParBusFader:(NSNumber *)x { 
    NSLog(@"passed value: %ld", (long)x.integerValue); 
} 

@end 

+0

임에서 작업 :

여기 아주 간단한 예제 코드, 스토리 보드 없음, 귀하의 제안은 문자 그대로 다른 뷰를 상위 뷰에 배치 한 것입니까? – jcad

+0

이 예제에서 스토리 보드와 관련된 유일한 작업은 버튼을 작업에 연결하는 것이 었습니다. 관계없이 ... ViewController를 간단하게 인스턴스화하고 그 안에 메서드를 호출하거나 하위 뷰 컨트롤러로 메서드를 추가 할 수 있습니다. 하위 뷰에 추가하면 몇 가지 장점이 있습니다. 특히 VC의 뷰를 현재 뷰 계층에 추가하는 경우에 특히 좋습니다. – DonMag

관련 문제