2014-02-19 3 views
0

UIViewController A에 컨테이너보기가 있는데 그 중 일부는 UIViewController B입니다. UIViewController A은 자체 컨테이너에서 어떤 일이 발생하는지 알 수 있기를 바랍니다.컨테이너 뷰에서 데이터 가져 오기

문제는 컨테이너에서보기에 액세스 할 수 없다는 것입니다. 예를 들어, 콘테이너에는 textfield의 뷰 컨트롤러가 있으며 누군가가 타이핑을 시작할 때 viewA에 알려주고 싶습니다.

delegates을 사용해야합니다. 그렇지 않으면 컨테이너보기에서 데이터를 가져 오는 방법이 있습니까?

+0

전화하는 '컨테이너'란 무엇입니까? UIViewController 뒤에 self.view? 명백한 것은 적어도 다른 사람들에게는 분명하지 않습니다. 적어도 나와 같은 바보는 아닙니다. –

+0

MVC. 텍스트 필드의 변경 사항은 어딘가에 모델 클래스에 저장되어야합니다 (전역 적으로 정의 될 수도 있음). 뷰 컨트롤러는이 입력을 관리하고 모델에 있으면 모든 곳에서 볼 수 있습니다. – trojanfoe

+0

@ 트로이의 목소리 이것은 대답이 아닙니다. 나는 데이터를 공유하는 방법을 안다. 나는 어떤 종류의 대의원이 필요합니다. 나는 부모님이 방금 전에 있었던 일에 대해 알리고 싶습니다. l 토마토, 너 바보가 아니야 .. 네가 진술 한 것이 진실이다. 나는 용기보기로 self.view와 함께 간다. – Curnelious

답변

1

자식 UIViewController can access it's parent with parentViewController`를 사용하고 부모에게 메시지를 보내는 데 사용합니다. 이 작업을 직접 수행 할 수는 있지만 ...

상호 작용 수준에 따라 부모 인 UIViewController이 구현하는 인터페이스를 만드는 것이 가장 좋습니다. 자식 UIViewController이 부모에 추가되면 인터페이스를 구현하는 객체에 대한 참조를 가져옵니다. 객체간에 강력한 상호 작용을 제공하지만 적절한 캡슐화를 유지하며 위임 패턴입니다.

내 대답은 위임 패턴을 사용할 필요가 없지만 적절한 해결책 인 것처럼 보입니다. 델리게이트 패턴을 사용하지 않는다면 한 쌍의 객체로 자신을 발견 할 수 있습니다. B가 대리자를 A에 아이로서 추가됩니다

// Somewhere in your view controller A you want to add B as a child 
B *b = [[B alloc] init]; // create view controller B 
b.delegate = self;  // set up A as the delegate to B 

// Add B as child 
[self addChildViewController:b]; 
[self.containerView addSubview:b.view]; 

가 설정됩니다. A이 인터페이스를 구현한다고 가정하면 B@property (weak, nonatomic) id<MySomethingDelegate> delegate;B과 같은 속성을 가지므로 언제든지 위임 메서드를 호출 할 수 있어야합니다.

+0

감사합니다. UIViewController * sv는 [sv setDelegate : self]를 수행 할 수 없기 때문에 먼저 뷰 컨트롤러 인스턴스에 대리자 수신기를 추가 할 수 없습니다. 둘째, 마지막 옵션에 관해 나에게 어떤 방향을 보여줄 수 있니? 나는 당신이 의미하는 것을 이해할 수 없었다. – Curnelious

+0

당신은 그것을 할 수 없다. UIViewController * b 대신 B * b를 수행하면 자식으로 추가 할 수 없습니다. – Curnelious

+0

'B'는'UIViewController'의 하위 클래스 여야합니다. – DBD

관련 문제