2016-09-27 4 views
1

각각의 TableViewController가있는 드릴 다운 테이블을 사용하는 응용 프로그램을 만들고 있습니다. 그래서 내 스토리 보드는 다른 TableViewController에 대한 Segue가있는 TableViewController (MainTable)에 Segue가있는 MainViewController로 설정됩니다. SubTable). 나는 프로토콜을 만들었으므로 이제 Delegate로 SubTable을, Delegate로 MainTable을 할당하려고합니다. 내가 발견 한 모든 솔루션은 delegator가 delegate 클래스에서 직접 호출 (또는 segued)되었을 때만 작동합니다.이 경우 prepareForSegue 메소드에서 SubTable.delegate = self을 사용할 수 있지만 SubTable이 호출되면 작동하지 않습니다) 대리자 클래스 (MainView) 내에서. 죄송합니다. 혼란 스럽다면, 그 중 하나를 분명히 밝힙니다. 여기에 내가 원하는 걸의 예입니다Swift : 위임자 클래스가 직접 하위 클래스가 아닌 경우 위임 클래스를 할당 하시겠습니까?

class MainViewController: UIViewController, delegate { 
    override func viewDidLoad() {   
     super.viewDidLoad() 
     SubTable.delegate = self //Doesn't work 
    } 

    func acceptData(data: String!) { 
     print(data) 
    } 
} 

서브 테이블이 아직 생성되지 않았기 때문에 SubTable.delegate = 자기 라인이 작동하지 않습니다,하지만 난 만들 경우 미리 다음 다음 instance.delegate = selflet instance = SubTable() 같은 것을 사용하고, MainTable에서 SubTable으로의 Segue가 SubTable의 새로운 인스턴스를 생성하기 때문에 여전히 효과가 없습니다.

protocol delegate { 
    func acceptData(data: String!) 
} 

class MainTable: UITableViewController { 

} 

class SubTable: UITableViewController { 
    var delegate: delegate? 

    func sendData() { 
     self.delegate?.acceptData(data: "some text") 
    } 
} 
+0

당신이 탐색 컨트롤러를 사용하고 있습니까? –

+0

대리자를 설정할 사용자 정의 이니셜 라이저를 사용해 보셨습니까? 또는 SubTable 내에서 parentViewController를 사용하고 계십니까? – ohr

답변

1

대리인을 MainTable에 전달하고 SubTable을 만들 때 할당 할 수 있습니다. 당신의 MainTable의 필드가 MainViewController에 그것을

var subTableDelegate : delegate? 

를 저장하기 위해 만듭니다 MainTable에서

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let destinationVC = segue.destination as! MainTable 
    destinationVC.subTableDelegte = self 
} 

:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let destinationVC = segue.destination as! SubTable 
    destinationVC.delegate = self.subTableDelegate 
} 
+0

감사합니다. –