2013-06-19 3 views
0

Xcode의 내 단일보기 응용 프로그램에는 전체 iPhone 화면 크기의 약 절반 인 사용자 정의보기가 있습니다. 사용자 정의보기 내부에서만 사용할 수있는 그리기 도구를 구현했습니다. 사용자 정의보기는 그리기 도구가 이동 된 거리를 기록합니다. 하나의 ViewController 만 있으면 사용자 정의 뷰 프레임 외부의 Label에 distance 변수를 표시하려고합니다. 이 작업을 수행하는 데 프로토콜 및 위임자를 사용해야합니까? 아니면 훨씬 간단한 방법이 있습니까? 나는 지난 며칠 동안 프로토콜과 델리게이트 방법으로 테스트를 해왔으며 어디에서도 얻지 못했습니다.사용자 정의보기에서 ViewController로 데이터 전달

답변

0

사용자 정의보기에는 도면 길이에 대한 속성이 있어야합니다. 그런 다음 사용자 정의보기에 대한 참조가있는 모든 클래스에서 값을 읽을 수 있습니다.

아마도 도면 컨트롤러의 길이가 늘어날 때마다보기 컨트롤러가 레이블을 업데이트하게하는 것이 좋습니다. 키 - 값 관측으로이를 처리 할 수 ​​있습니다. drawingLength 속성이 변경되면 사용자 지정보기 개체에서 알림을 등록합니다.

위임자와 함께 할 수 있습니다. 어떤 경우에는 이것이 더 깨끗한 해결책이라고 생각합니다. 사용자 정의보기에서 어떤 종류의 업데이트를들을 수 있는지 확인하는 것이 좋습니다. 그러나 이런 종류의 경우는 Key-Value Observing이 의도 한 것입니다.

+0

이 모든 것이 유효한 해결책이지만 위임 프로토콜을 설정하여보기 컨트롤러에 업데이트를 알리는 것이 좋습니다. 키 값 관측은 확실히 작동하지만 일반적으로 컨트롤러가 수정중인 개체의 실제 소유자가 아닌 경우에 사용됩니다. 이것은 대표 프로토콜의 표준 용도의 일종입니다. – mrosales

1

먼저 인터페이스 빌더에서 사용자 정의보기를 주보기 constrollers보기의 서브보기로 추가하고 레이블도 추가하십시오. 그런 다음 레이블 및 뷰에 대한 콘센트를 뷰 컨트롤러에 추가합니다 (각각 distanceLabel 및 drawView라고 부름).

이제 사용자 정의보기의 속성으로 distanceDrawn을 선언하고 도구를 이동하면 올바른 번호를 포함하도록 업데이트합니다. 뷰 컨트롤러에서 다음

는 추가의 viewDidLoad : 당신이 distanceDrawn이 메소드가 호출됩니다 변경하고 사전이라는 변화가 포함될 때마다 이제

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
    { 
     if ([object isEqual:drawView]) { 
      id distance = change[NSKeyValueChangeNewKey]; //change to appropriate type 
      distanceLabel.text = [NSString stringWithFormat:@"%@", distance]; 
     } 
    } 

:

[drawView addObersver:self forKeyPath:@"distanceDrawn" options:NSKeyValueObservingOptionNew context:null] 

는 또한 컨트롤러에 추가 새롭게 설정된 키의 값 NSKeyValueChangeNewKey 값을 검색하면 레이블을 업데이트 할 수 있습니다.

+0

값을 검색하면 무엇을 의미합니까? 그 시점까지는 모두 마지막 문장을 제외하고 나에게 의미가 있습니다. 감사. @CannibalGorilla – user2480376

+0

미안하지만, 나는 당신이 반응 한 것을 정말로 보지 못했습니다. 나는 위의 코드에서와 같이'-observeValueForKeyPath : ofObject : change : context :'에서'[change objectForKey : NSKeyValueChangeNewKey]'를 호출하고 반환 값을 사용하여 레이블을 업데이트 할 수 있다는 것을 의미했습니다. 너무 늦지 않았 으면 좋겠다. – CannibalGorilla

관련 문제