2010-11-22 7 views
0

보기로 UIView를 초기화하는보기 컨트롤러가 있습니다. 이 뷰는 또 다른 UIView를 하위 뷰로 초기화합니다. 두 UIView는 델리게이트/프로토콜을 통해 View Controller와 통신합니다.두 개의 View Controller 인스턴스간에 값을 공유하는 방법은 무엇입니까?

각각의 UIView는의 ViewController의 인스턴스를 생성하고, 델리게이트는 동일하게 :

ViewController *aDelegate = [[ViewController alloc] init]; 
self.delegate = aDelegate; 

문제 :보기 제어기 모두 UIViews 의해 수정된다 (INT)의 선택이라는 변수를 갖는다. 두 뷰는 서로가 변수를 어떻게 수정했는지를 알아야하지만 각각은 뷰 컨트롤러의 다른 인스턴스를 가지고있어 통신이 불가능합니다. 이 문제를 어떻게 해결할 수 있습니까?

감사 톤

편집 : 피터 내가 좋아하는 뷰 생성시 대리인을 지정 언급,하지만 난 할 것이라고 어떻게 그것이있는 UIView 아닌 뷰 컨트롤러에서 생성되기 때문에 하위 뷰에 대한. 추신. 실제로 그것은 서브 뷰의 서브 뷰의 서브 뷰이므로 뷰 컨트롤러에서 모든 뷰를 만든 다음이를 위임자로 지정할 수 있습니까? 그것은 대신 뷰 컨트롤러의 별도의 인스턴스를 할당하는 각보기의 같은 소리

MyView *mainView = [[MyView alloc] initWithFrame:frame]; 
self.view = mainView; 
mainView.delegate = self; 
[mainView release]; 
+0

가능성이 있습니다. 하나의 ViewController와 두 개의 UIView가 있어야합니다. – joshpaul

+0

그게 내가 가진 서브 뷰가있는 uiview가있는 뷰 컨트롤러이다. – John

+0

가능한 복제본 : http://stackoverflow.com/q/3185760/40175 – Akusete

답변

0

보기가 서로에 대해 알 필요가 없습니다. 보기 컨트롤러에서 당신은 그럼 당신은 당신의 하위 뷰를 작성하고 대리자를 지정 하위 뷰

@property (nonatomic, retain) MyView *myView;

에 대한 속성을 정의합니다. 이것은 내가 그냥 볼 수있는 방법을 추측하여 대리자 메서드에 다음

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CGRect frame = ...; 
    MyView *subView = [[MyView alloc] initWithFrame:frame]; 
    self.myView = subView; 
    subView.delegate = self; 
    [self.view addSubView:subView]; 
    [subView release]; 


    self.view.delegate = self; 
} 

있는 viewDidLoad

수행 할 수 있습니다, 당신은 뷰 컨트롤러뿐만 아니라 다른보기를 업데이트 할 수 있습니다.

- (void)view:(MyView *)view didUpdateSelection:(int)newSelection { 
    self.selection = newSelection; 
    if (view == self.view) { 
     self.myView.selection = newSelection; 
    } 
    else { 
     self.view.selection = newSelection; 
    } 
} 
0

을 :

다음하지만 내가보기에서의 ViewController 메소드를 호출 할 때이 계속 충돌로 대리자를 할당 시도 뷰를 만든 뷰 컨트롤러의 인스턴스를 각 뷰의 위임자로 지정하려고합니다.

이 방법에 접근하는 한 가지 방법은보기를 만들 때보기 컨트롤러가보기의 위임자로 할당되도록하는 것입니다.

+0

굉장히, 내가 어떻게 서브 뷰를 위해 그렇게하겠습니까? – John

+0

하나의 옵션은 위의 편집에서 언급 한 것처럼 뷰 컨트롤러에 모든 하위 뷰를 만들고 거기에 대리자를 할당하는 것입니다. –

+0

시도했지만 그게 계속 충돌, 내가 사용하고있는 위의 편집을했다. 지금까지 도움을 주셔서 다시 한번 감사드립니다. – John

관련 문제