2017-09-03 6 views
-1

저는 2 개의 다른 ViewController가 포함 된 분할 뷰가있는 MacOS 프로젝트에서 작업하고 있는데, 기본 윈도우의 ViewController에 액세스하는 방법을 알 수 없습니다 ViewController. 다른 컨트롤러의 메서드, 액션 및/또는 콘센트에 신속하게 액세스하기

는 설정이다 :

screenshot of storyboard

가 기본적으로 내가 할 노력하고있어 것은 내 ViewControllerButton을 사용하는 것입니다 왼쪽 상단 오른쪽에 내 SectionControllerLabel에 액세스 할 수있는 내 분할보기에 포함되어 있습니다.

다른 ViewController의 컨트롤에 대해 IBAction 또는 IBOutlet을 만들 수 없기 때문에 연결하는 방법을 알 수 없습니다. 현재 해결 방법은 내 AppDelegate에 속성이 있고 주 공유 응용 프로그램 대리자에 액세스하는 것이었지만 이는 해킹 된 것으로 보이며 확장되지 않습니다. 계속 진행하는 방법에 대해 완전히 분실했습니다. 데이터 또는 다른 ViewController (s) 무엇이든 전달하는 함수를 사용하여 확인 해요.

저는 스위프트 4를 Xcode 9 (베타)와 함께 사용하고 있습니다.

아이디어가 있으십니까?

+0

"나는 다른의 ViewController에서 컨트롤에 대한 IBAction를하거나 함께 IBOutlet을 만들 수 없기 때문에"

var aViewController: YourFirstViewController? var bViewController: YourSecondViewController? override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "aViewSegue" { self.aViewController = segue.destination as! YourFirstViewController } else if segue.identifier == "bViewSegue" { self.bViewController = segue.destination as! YourSecondViewController } } 

그래서 당신은 당신의 컨테이너 뷰 컨트롤러에서 그런 식으로 액세스 할 수 있습니다 각 분할에 대한 뷰 컨트롤러 서브 클래스를 작성하십시오. Apple, Inc.에서 일하면 동료에게 물어보십시오. –

+0

각 분할에는 이미 ViewController 하위 클래스가 있으며 여기에는 일부 함수/액션/속성이 추가되어 있지만 최상위 수준보기에서 도달 할 방법이 없습니다. 내가 놓친 다른 것이 있습니까? 사과 : 그것은 큰 회사, 나는 내 부서에서 xcode/swift/cocoa에서 일하는 개발자가 없습니다. –

답변

1

물론 다른 ViewController의 컨트롤에 대해 IBAction이나 IBOutlet을 만들 수 없습니다 !! 그러나 계층의 각보기 컨트롤러에는 하위보기 컨트롤러에 대한 참조가 있습니다.

방법 1 :

@IBAction func buttonTapped(_ sender: Any) { 
    let splitViewController = self.childViewControllers[0] as! YourSplitViewController 
    let targetViewController = splitViewController.childViewControllers[0] as! YourTargetViewController 
    targetViewController.label.text = "Whatever!" 
} 

방법 2 :

당신이 당신의 "SEGUE 준비"방법의 각 자식 컨트롤러에 대한 참조를했다 경우가 더 좋을 수 있습니다

ContainerViewController :

var mySplitViewController: YourSplitViewController? 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "splitViewSegue" { 
     self.mySplitViewController = segue.destination as! YourSplitViewController 
    } 
} 
(210)

YourSplitViewController :

@IBAction func buttonTapped(_ sender: Any) { 
    self.mySplitViewController.firstViewController.label.text = "Whatever!" 
} 
+0

이 작업을 수행하려면 NSSplitViewController를 서브 클래스 화해야합니까? splitview가 Container View에 임베드되어 최상위 레벨 뷰의'childViewController'처럼 보이지 않았고 하위 뷰의'parent'처럼 보이지 않았기 때문에 나는 그것을 보았습니다. 나는 이것이 내가 배선하고있는 방법으로 내가 빠뜨린 사소한 것이 있다고 생각한다. –

+0

오케이, 네가 나에게 준 정보를 만지작 거리며, 나는 무슨 일이 일어나고 있는지를 생각해 냈다. (전에 결코 섹스를 다루지 않았다). 나는 덜컥 거릴 것이다. 그러나 이것은 나를 바른 길로 가게했다. 감사! –

+0

방법 1의 경우 UISplitViewController를 하위 클래스화할 필요가 없습니다. childViewControllers 속성을 통해 호출 할 수 있습니다. –