2013-06-20 3 views
6

아마도 이것은 바보 같은 질문 일 수도 있지만, iOS 개발 중에 여러 번 부딪 혔습니다.iOS - ViewController 대 UIView 하위 클래스를 만드는시기?

때로는 여러 화면에서 사용하려는보기 구성 요소를 개발할 것이므로 UIView의 하위 클래스로 지정하고 여러 곳에서 사용할 수 있도록 할 것입니다.

그런 다음 기능을 추가하기 시작합니다. 어쩌면 NSNotification에 응답해야하거나 사용자 접촉에 응답해야 할 수도 있습니다.

특정 시점에서, 내가 실제로 UIViewController 서브 클래스를 만들고 자식 UI 인 ViewController로 추가해야하는지 궁금합니다.

UIView에 몇 가지 동작을 추가 할 때와 전체 UIViewController을 만들 때 사이에 선을 그리는 데 합의가 있습니까?

답변

3

데이터를 처리하거나 제어해야하는 경우 컨트롤러를 사용해야합니다. 조회수는 가능한 한 바보 같아야하며 표시되는 내용을 알지 못하고 오히려 어디에 있는지 알지 못합니다. ViewController를 쉽게 하위 클래스로 만들고 재사용 할 수 있습니다. 좋은 예를 들어, 팝 어버 컨트롤러와 모달을 통해 앱 전체에서 사용자로부터 문자열 (또는 텍스트)을 가져와야한다고 가정 해 보겠습니다. 텍스트 필드와 버튼이있는보기가있는 UIViewController의 일반 하위 클래스를 만듭니다. 그런 다음이보기를 사용할 수 있으며 컨트롤러는 필요한 모든 용량으로 사용할 수 있습니다. popover, 모달 또는 다른 곳에서 재사용합니다 (일반적으로 위임을 통해 다시 데이터를 전달합니다). 데이터를 다루고 있으므로 UIView의 유일한 하위 클래스를 사용하면 안됩니다.

내 경험에 비추어 볼 때 UIViewControllers은 더 자주 UIViews입니다. 일반 응용 프로그램 워크 플로에서 컨테이너 또는 뷰 재사용에 대해 전적으로 말하면 이해하기가 다소 어렵습니다. 어느 쪽이든 그것은 같아야합니다.

+0

Beautiful. 그것은 항상 나의 성향이기도합니다. –

+0

이 메시지를 게시하라는 메시지는 실제로 재사용되지 않는 무언가를위한 것입니다. 특정 화면에서만 매우 구체적입니다. 그러나 구성 요소에는 배관이 많으며 실제로 ViewController와 분리가 필요하다고 느꼈습니다. –

+0

네가 무슨 뜻인지 알 겠어. 특정 상황을 위해 UIViewController를 서브 클래 싱하는 것은 나쁜 생각은 아니지만 최대한 일반화되도록 시도하십시오. 내 예제 에서처럼 ColorNameCollector라는 이름을 지정하지 마십시오. 색상을 가져 오는 데만 사용할 수 있기 때문입니다. 오히려'StringCollector'와 같은 이름을 붙입니다. 이 방법은보다 일반적이며 사용자가 어디에서 또는 어떻게 사용하고 표시하는지에 관계없이 사용자가 문자열을 가져와야 할 때마다 사용할 수 있습니다. – Firo

0

필자는 수시로 재사용 가능한 테이블 뷰를로드하기 위해 내장 된 뷰 컨트롤러를 사용했습니다. 나는 때때로 유용 할 때가 있지만 항상 그런 것은 아님을 알았다. 임베디드 컨트롤러가 컨테이너에 다시 통신하도록하려는 경우처럼 두 서버 간 통신은 번거로울 수 있습니다. 위임을하면 더 쉽지만 여전히 성가시다. 또한 iOS 5를 올바르게 기억한다면 임베디드 컨트롤러를 지원하지 않기 때문에 iOS 6으로 제한됩니다.

방금 ​​메서드를 추가하는 경우 범주를 사용하여 몇 가지 추가 메서드를 저장할 수 있습니다. NSManagedObjects에서 하위 클래스로 만들고 싶지 않으며 NSManagedObject를 데이터 모델에서 다시 생성하면 해당 범주의 코드가 손실되지 않습니다. 서브 클래 싱 할 필요없이 계산 된 필드 나 변환 메소드와 같은 기능을 추가했습니다. 특정 인스턴스에 대해 이러한 메소드가 필요하지 않은 경우 카테고리에 대한 참조 만 제외하십시오.

IMO는 하위 클래스로 분류되지 않습니다.

4

나는 합의에 대해 얘기하지만, 여기에 제 생각입니다 수 없습니다

당신은
  • 그리기 사용자 정의하고 싶은
    • 당신은 몇 가지를 정의해야

      서브 클래스 UIView 만 ... 이미 존재하는 UIView 하위 클래스의 동작

    • 하위 뷰 레이아웃에 대한 특별한 요구 사항이 있습니다. 대부분의 레이아웃은 UIViewController으로 수행 할 수 있습니다.어쩌면 당신은 다른 모든 경우에서 제스처 인식기

    서브 클래스 UIViewController 함께 할 수없는 특별한 터치 처리를위한

  • . 어쨌든 뷰와 모델을 연결하는 glue 코드를 작성하거나 사용자 상호 작용을 처리하기 위해 거의 항상 컨트롤러가 필요합니다. 따라서 Apple은 UIKit을 사용하여 컨트롤러가 모든 작업을 수행하고 뷰를 가능한 한 "어리석은"것으로 유지하도록했습니다. 예를 들어, 하나의 뷰 서브 클래스를 가질 필요없이 복잡한 뷰 계층을 작성하기 위해 컨트롤러를 중첩하는 것은 매우 간단합니다.

    하위 클래스 UIView이 첫 번째로 수행해야하는 지표는 UIView class reference의 "하위 클래 싱 대안"섹션입니다. UIViewController을 하위 클래스 화하는 것이 바람직한 경우 표시기는 UIViewController class reference :-)에 해당 섹션이 없음을 나타냅니다.

  • +0

    멋진 답변, 감사합니다! –

    +0

    @herzbube 그런 이유로 우리는 IB에있는 자식 VC가있는 컨테이너 뷰가 있다고 생각합니까? 이것은 장면 사이의 UI 부분을 공유하는 방법입니까 (예 : 프로필 사진 + 이름 + 상태 도트와 같은)? – allaire

    +0

    @allaire 댓글은 토론에 유용하지 않으며 그렇게하려는 의도도 없습니다. 의견을 얻기 위해 채팅 채널에서이 토론을 시작할 수 있습니다. 즉, 나는 1) 나는 IB를 많이 사용한 적이 없다는 것을 인정한다. 2) 저는 몇 달 동안 iOS 개발과의 연결을 끊어 버렸기 때문에 요즘 IB가 devs에게주고있는 것을 정말로 모르며, Apple이 어떻게 사용해야한다고 생각 하는지를 잘 모릅니다. 기술 비디오 한두 장 볼까? – herzbube

    관련 문제