문제

나는 복잡한 아이 패드록을 관리함으로써 여러 가지 볼 수 있습니다.나는 이전에(전 iOS6/XCode4.5)이런 짓을 할당하여 내보기 컨트롤러 코드에서와 엮은 다양한 전망하지만 그들을 링크하는 마스터 보기입니다.

내가 무엇을 하고 싶은 사용하여 새로운 컨테이너망을 포함합 보기 컨트롤러 스토리 보드에서 파일입니다.나는 것 같다하지 않을 만들 수 있는 IBOutlet 에 대한 링크를 포함된 뷰 컨트롤러 마스터 컨트롤러입니다.

이 가능합니까?나를 검색하는 임베디드 컨트롤러를 통해 태그나 뭔가 코드에서?

이 질문에 대해 구체적으로 사용하여 컨테이너 뷰

도움이 되었습니까?

해결책

나는 "임베디드 컨트롤러를 검색"한 것을 확신하지 못합니다.컨트롤러를 사용하려는 경우 UistoryBoard 메서드 인스턴트 AtteiveViewControllerWithIdentifier ViewsControllerWithIdentifierVy를 사용합니다.PerfectSegueWithIdentifier를 사용할 수도 있습니다. Sender : Method (View Controller를 인스턴스화하는).Apple 문서의 앱에서 "앱에서 View Controllers 사용"섹션을 확인해야합니다.또한 자식 뷰 컨트롤러가 컨테이너 컨트롤러와 동시에 인스턴스화되는 사실을 참조합니다.

편집 후 : 다른 뷰 컨트롤러에 컨테이너보기를 삽입하는 경우 셀프 .ChildViewControllers (배열이 될 수 있으므로) 포함 된 컨트롤러에서 임베디드 뷰 컨트롤러를 참조 할 수 있습니다.LastObject와 함께).

다른 팁

또 다른 옵션에 대한 몇 가지 사례를 캡처하는 임베디드 컨트롤러 사용 -prepareForSegue:sender:.

예를 들어,이 있는 경우 UINavigationController 에 포함된 CustomContainerViewController, 수 이름을 포함 segue embedContentStack 스토리보드 및에서 캡처 CustomContainerViewController via

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"embedContentStack"]) {
        // can't assign the view controller from an embed segue via the storyboard, so capture here
        _contentStack = (UINavigationController *)segue.destinationViewController;
    }
}

주의 참고

을 진행하기 전에 사용하는 이 질문에 대답할 수 있습을 반영하는지 여부를 포함 된 것은 정말 필요할 보기 컨트롤러입니다.

예를 들어,당신은 포함 UICollectionViewController 서브 클래스,수 당신이 대신에 포함 UICollectionView 서브 클래스는?또는,더 나은,당신은 포함 UIView 서브 클래스는 것을 숨기고 UICollectionView 뒤에 간단한 뷰 모델?

코드 베이스 나는 현재 작업에,나는 포함하 두 개의 보기 컨트롤러에서 또 다른 볼 컨트롤러입니다.모두 비교적 쉽게 될 전망 대신할 수 있는 더 쉽게 바 스토리보드에서 이없이 지저분한 코드입니다.

불행하게도,그들은 현재 보기 컨트롤러와 나에서 위치를 간소화하에서 일반 뷰 지금,그래서 이해야 할 것입니다.

배경

내가 사용하여 접근 방식이 선정한 최고의 포함에 segue prepare(for segue:, sender:) 에 의해 제안 장난 괴짜 여기에.

을 보여주고 싶었 swift 나는 이것을 사용하고 있습니다,그것을 상당히 깔끔한...

class EditionLandingViewController: UIViewController {
    fileprivate var titlesView: SectionTitlesViewController!
    fileprivate var sectionsView: SectionsViewController!
}

//MARK:-

extension EditionLandingViewController {
    private enum SegueId: String {
        case embedTitles
        case embedSections
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        super.prepare(for: segue, sender: sender)

        guard
            let segueRawId = segue.identifier,
            let segueId = SegueId(rawValue: segueRawId)
            else { return }

        switch segueId {
        case .embedTitles:
            self.titlesView = segue.destination as! SectionTitlesViewController

        case .embedSections:
            self.sectionsView = segue.destination as! SectionsViewController
        }
    }
}

토론

나는 선택 이름 segues 으로 동작 방법.

를 사용하는 enum 에 대한 사례연스럽게 식별자의 의미를 컴파일러 및 장식새김 귀하의 측면에서,그래서 얻을 훨씬 어렵 segue 이름 잘못입니다.

유지 segue id private enumextension 범위를 보 이 경우에 해당으로 이러한 segues 되지 않은 다른 곳에서는 필요(그들은 수 없습니다 performed,예를 들어).

내가 사용하는 암시적으로 풀어 유형을 위한 임베디드 뷰 컨트롤러기 때문에(나의 케이스에서 어쨌든)그것은 논리에 오류가 있다면 그들은 없습니다.

마찬가지로,나도 행복을 강제로 캐스팅 대상 보기 컨트롤러는 형식입니다.다시,그것은 논리 오류는 경우 이러한 형식이 동일하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top