Xcode의 내 단일보기 응용 프로그램에는 전체 iPhone 화면 크기의 약 절반 인 사용자 정의보기가 있습니다. 사용자 정의보기 내부에서만 사용할 수있는 그리기 도구를 구현했습니다. 사용자 정의보기는 그리기 도구가 이동 된 거리를 기록합니다. 하나의 ViewController 만 있으면 사용자 정의 뷰 프레임 외부의 Label에 distance 변수를 표시하려고합니다. 이 작업을 수행하는 데 프로토콜 및 위임자를 사용해야합니까? 아니면 훨씬 간단한 방법이 있습니까? 나는 지난 며칠 동안 프로토콜과 델리게이트 방법으로 테스트를 해왔으며 어디에서도 얻지 못했습니다.사용자 정의보기에서 ViewController로 데이터 전달
답변
사용자 정의보기에는 도면 길이에 대한 속성이 있어야합니다. 그런 다음 사용자 정의보기에 대한 참조가있는 모든 클래스에서 값을 읽을 수 있습니다.
아마도 도면 컨트롤러의 길이가 늘어날 때마다보기 컨트롤러가 레이블을 업데이트하게하는 것이 좋습니다. 키 - 값 관측으로이를 처리 할 수 있습니다. drawingLength 속성이 변경되면 사용자 지정보기 개체에서 알림을 등록합니다.
위임자와 함께 할 수 있습니다. 어떤 경우에는 이것이 더 깨끗한 해결책이라고 생각합니다. 사용자 정의보기에서 어떤 종류의 업데이트를들을 수 있는지 확인하는 것이 좋습니다. 그러나 이런 종류의 경우는 Key-Value Observing이 의도 한 것입니다.
먼저 인터페이스 빌더에서 사용자 정의보기를 주보기 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
값을 검색하면 레이블을 업데이트 할 수 있습니다.
값을 검색하면 무엇을 의미합니까? 그 시점까지는 모두 마지막 문장을 제외하고 나에게 의미가 있습니다. 감사. @CannibalGorilla – user2480376
미안하지만, 나는 당신이 반응 한 것을 정말로 보지 못했습니다. 나는 위의 코드에서와 같이'-observeValueForKeyPath : ofObject : change : context :'에서'[change objectForKey : NSKeyValueChangeNewKey]'를 호출하고 반환 값을 사용하여 레이블을 업데이트 할 수 있다는 것을 의미했습니다. 너무 늦지 않았 으면 좋겠다. – CannibalGorilla
- 1. 사용자 정의보기에서 활동으로 또는 그 반대로 데이터 전달
- 2. 정보를 다시 UITableViewDataSource에서 ViewController로 전달
- 3. 사용자 정의보기에서 상위 활동으로 데이터 보내기
- 4. 사용자 정의보기에서 메서드 호출
- 5. 사용자 정의보기에서 레이아웃 처리
- 6. 사용자 정의보기에서 진동기 구현
- 7. StartActivityfor 사용자 정의보기에서
- 8. 사용자 정의보기에서 카메라 열기
- 9. 내 사용자 정의보기에서 그리기
- 10. 사용자 정의보기에서 TextView 업데이트
- 11. 다운로드 진행률을 다른 ViewController로 전달
- 12. 탐색 스택의 tablecontroller에서 viewcontroller로 문자열 전달
- 13. 하나의 viewcontroller에서 기존의 viewcontroller로 프로그래밍 방식으로 데이터 전달
- 14. NSUserdefaults를 사용하여 하나의 ViewController에서 다른 ViewController로 데이터 전달
- 15. 사용자 정의보기에서 이상한 앤티 앨리어싱
- 16. 사용자 정의보기에서 Gravity()를 얻으려면?
- 17. 사용자 정의보기에서 OnClick이 작동하지 않습니다.
- 18. 사용자 정의보기에서 선택기를 사용하는 방법
- 19. 사용자 정의보기에서 FrameLayout 내용 바꾸기
- 20. 사용자 정의보기에서 회 전자 초기화
- 21. AlertDialog의 사용자 정의보기에서 EditText에 액세스
- 22. 사용자 정의보기에서 GridView를 재활용 하시겠습니까?
- 23. 사용자 정의보기에서 안드로이드 UI 업데이트
- 24. 사용자 정의보기에서 onDraw가 호출되지 않았습니다.
- 25. 사용자 정의보기에서 트리플 탭 식별
- 26. 컨텍스트를 사용자 정의보기에서 가져 오는 중?
- 27. 사용자 컨트롤간에 데이터 전달
- 28. 사용자 정의보기에서 표준 레이아웃 attrributes에 액세스
- 29. ViewController에서 다른 ViewController로 데이터 가져 오기
- 30. delegate에서 viewcontroller로 데이터 전달하기 iOS
이 모든 것이 유효한 해결책이지만 위임 프로토콜을 설정하여보기 컨트롤러에 업데이트를 알리는 것이 좋습니다. 키 값 관측은 확실히 작동하지만 일반적으로 컨트롤러가 수정중인 개체의 실제 소유자가 아닌 경우에 사용됩니다. 이것은 대표 프로토콜의 표준 용도의 일종입니다. – mrosales