2013-01-07 3 views
0

기본적으로 두 개의 하위보기가있는보기 컨트롤러가 있습니다. 나는이 견해들을 연결시키고 싶다. 터치 이벤트는 다른보기에서 이벤트를 트리거하고 그 반대도 마찬가지입니다. 나는 두 가지 해결책에 대해 생각 해왔다. 자신의 뷰 컨트롤러를 통해 뷰를 액세스IOS 다른보기에서 하나의보기에 액세스하기

1)은

2) 각 뷰는 다른 뷰

나는 IOS에 초보자 오전까지 내가 그것을 언급되는 다른 문제 읽기에 대한 포인터를 가지고 뷰 컨트롤러를 뷰에서 액세스하는 것은 제안되지 않습니다. 그럼, 너희들이 나에게 무엇을 제안하니?

편집 : 나는 코딩에 많은 진전을하지 않았다하지만 내 첫 번째보기가

:

@interface PaintView : UIView 
-(id)initWithFrame:(CGRect)frame andController:(ViewController*)ctrl; 

내가 터치 이벤트를 제어하고 내의 ViewController에 액세스 :

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //[self.controller somethingThatAccessToOtherView] 
} 

이고 두 번째보기는 그 것과 매우 비슷합니다.

+0

코드를 추가하십시오 .... – NANNAV

+0

사용자 정의 UIView를 사용하고 있습니까? – CRDave

+0

내보기를 보여주기 위해 몇 가지 코드를 추가했습니다. – mayy00

답변

1

왜 대리인 패턴을 사용하지 마십시오! 두 뷰
서로 통신 .. 그 본질적으로 유사한는이 때문에 스레드이지만 더 유연한 방식

here
here "각 뷰는 다른 뷰 포인터를 가진다"되는 그것을위한 간단한 튜토리얼

+0

감사합니다. 지금 확인 중입니다. – mayy00

0

UIViewController의 하위 클래스에서이 작업을 수행하는 대신 두 개의 멤버가 있어야합니다. 이 멤버는 각 하위 뷰를 나타냅니다.

이제 서브 클래스 UIViewController 안에 관심있는 터치 방법을 추가하십시오. 이 메소드에서 터치 이벤트가 생성 된 뷰를 식별합니다.

이벤트에 따라 다른보기로 이벤트를 전달하십시오.

UIView 하위 클래스의 iVar로 UIViewController가 없어야합니다.

+0

하지만이 경우 터치 이벤트가있는보기를 제어해야합니다. 그것은 그것을 계산하는 개발자를위한 추가 부담 아닌가요? – mayy00

+0

그다지 .. 더 나은 연습과 API는 동일한 작업을 수행 할 수 있습니다. – Apurv

+0

뷰는 회전 할 수 있으며 개발자는 2 개 이상의 뷰를 가질 수 있습니다. 상황을 더 어렵게 만듭니다. – mayy00

1

당신이 가장 단순하고, 더럽고, 추천되지 않는 방법을 원한다면. 독특한 태그의 일종하여 두 가지보기를 (사용, 말 -20과 -21, 또는 뭔가. 당신이 다음을 수행하면 뷰를 생성 뷰 컨트롤러 그래서.

[v1 setTag:-20]; 
[v2 setTag:-21]; 

을 그럼 당신은에서 할 수있는 태그 말하자면, V2, 다음에.

[self.superview viewWithTag:-20]; 

가 V1에 대한 참조를 얻을 수 있습니다. 그러나,이 같은 수퍼를 가정하고 일을하는 좋은 방법이 아니다 당신이 확실하지 않으면 그 뷰 heirachy은 변경되지 않습니다 (내가 말하고있는 것은 당신이 만든 위젯으로 아무도 만질 수없고 어쨌든 잘 문서화했다는 것입니다.)

더 좋은 방법은 대리자 패턴을 사용하는 것입니다. ViewController는 각 하위 뷰의 대리자입니다.터치에서 파단이

[delegate iwastouched:self]; 

같은 몇 가지 메서드를 호출하고 대리자

-(void) iwastouched:(UIView *) someview { 
    if(someview == v1){ 
     //view 1 was touched, do something to view two 
    } 
    if(someview == v2){ 
     //view 2 was touched, do something to view one 
    } 
} 

같은 방법이 알림을 사용하는 것하고 또 다른 나쁜 방법이있다. 지옥, 당신이 좋아할 수있는 많은 방법이 있습니다. 일부는 단지 좋지 않습니다.

+0

자세한 답변을 보내 주셔서 감사합니다! 첫 번째와 마지막 방법이 좋지 않은 것 같아서 대표단과 함께 갈 것입니다. – mayy00

관련 문제