UINavigationController
의 일부인 UIViewController
이 있고 내 탐색 막대에 사용자 지정보기가 필요합니다. 다음 코드는이 같은 것입니다 :스위프트 : 단단히 결합 된 뷰를 처리하는 방법?
class MyViewController: UIViewController
override func viewDidLoad() {
super.viewDidLoad()
self.customNavigationView = MyNavigationView()
self.navigationItem.titleView = self.customNavigationView
}
}
MyViewController
및 MyNavigationView
단단히 의미에서 연결되어있다 - 그들은 UI의 한 조각을 형성하고 함께 사용하는 경우에만 의미가. 그런 경우를 처리하는 가장 좋은 방법이 패턴과 맞는지 궁금합니다. 특히, 메시지를 MyNavigationView
에서 MyViewController
(태핑 한 버튼 등)로 보내는 것이 더 좋습니다.
- 는, 위임 패턴을 사용하십시오
MyNavigationViewDelegate
프로토콜을 만들고MyNavigationView
에delegate
속성을 추가 : 나는 다음과 같은 옵션을 보았다. 가장 객체 지향적 인 접근 방식이지만, 기본적으로 UI의 단일 단위 인 무언가에 대한 오버 헤드가 많습니다. MyNavigationView
의 내부 클래스가 강력한 관계를 나타 내기 위해 내부 클래스가되도록하십시오. . 괜찮아 보이지만 쉽게 탐색 할 수 있도록 클래스별로 파일을 갖고 싶습니다.weak var myViewController: MyViewController?
을MyNavigationView
에 사용하십시오. 의미 적으로 변수가 옵션이 아니어야한다고 생각하지 않습니다.let myViewController: MyViewController
과MyNavigationView
에 사용자 정의 이니셜 라이저를 설정합니다. 지금은 나에게 최고의 옵션 인 것처럼 보이지만 강력한 참조주기 이후로 메모리 누수가 발생할 수 있는지 확실하지 않습니다.- @Mohsen 호세 인 덕분에 :
MyNavigationView
에서MyViewController
으로 알림을 보냅니다.
다른 사람들의 생각이 궁금합니다. 여기에 사용해야하는 명확한 패턴이 있습니까? 아니면 맛의 문제입니까?
왜 사용자의보기가 호스트에 대해 알 수 있습니까? 부모님과 어떤 정보를 공유하고 싶습니까? –
정확히 그 점/질문입니다 : 일반적으로 볼 수는 없지만 두 사람이 너무 단단히 결합 된이 사건은 마치 저에게 마치 대리인 등을 두는 것보다 엄청난 오버 헤드가있는 것 같아요. 예를 들어, UI 이벤트 (버튼 누름 등)에 대한 메시지를 컨트롤러로 다시 보냅니다. – BlackWolf
대신 버튼 자체를 드러내 기 때문에 뷰의 속성으로 사용합니다. 그리고보기를 초기화 한 후 viewcontroller에서 컨트롤러 자체에서 처리 할 제스처 인식기를 할당합니다.그런 식으로보기가 여전히 호스트에 대해 아무것도 알지 못합니다. –