2014-12-01 1 views
1

세 가지 컨테이너를 사용하여 다른 콘텐츠를 표시하는 앱을 만들려고하지만 컨테이너간에 통신하는 데 문제가 있습니다. 하나의 컨테이너에있는 버튼을 탭하여 다른 컨테이너로 정보를 보내기 위해 segue를 사용하는 데 성공했지만,이 정보의 일부는 세 번째 컨테이너로 전달되어야합니다. 이를 위해 저는 델리게이트를 사용하고 싶었지만 델리게이트 변수에 대한 올바른 ViewController를 참조 할 수는 없습니다. 다음과 같이컨테이너의 형제보기 컨트롤러간에 델리게이트 사용

그래서 내가 원하는 간다 :

  1. CollectionViewCell는
  2. TableVC 정보를 수신 TableVC에 SEGUE 트리거링, 도청 테이블을 업데이트 TableVC이 세 번째 VC에
  3. 셋째 VC를 기능을 위임 트리거
  4. 일부 정보 및 업데이트를 가져옵니다.

위의 내용에서 1을 얻을 수있었습니다. 2 작동,하지만 다음과 같이 내 프로토콜을 만들었습니다 3.

에 붙어있어 다음 TableVC에서

protocol PurchaseDelegate { 
    func addToTotalAmount(product : Product) 
} 

나는 var delegate : PurchaseDelegate? = nil를 선언하고 IBAction를에 SEGUE에서 촉발 : delegate?.addToTotalAmount(product)

class thirdVC:UIViewController,PurchaseDelegate { 
    func addToTotalAmount(product : Product) { 
     println("Adding....") 
    } 
} 

세 가지 용기는 일부 초기화를 수행하는 주요 VC 내에 다음과 같이

세 번째 VC에서 나는 대리자를 구현 응용 프로그램에있는 것들.

내 문제는, 내 tableVC 내 대리자 변수에 thirdVC에서 참조를 얻는 방법을 모르겠다.

미리 감사드립니다.

+0

이 문제와 같은 소리는 대리인 패턴에 맞지 않습니다. 세 번째 viewController는 무엇을합니까? –

+0

세 번째 viewController에는 콜렉션 뷰에서 테이블 뷰로 추가 된 제품에 따라 업데이트해야하는 총 가격의 레이블이 있습니다. 또한 지불/등록을 시작하기위한 버튼이 있습니다. – Simon

+0

당신이하려는 것은 대리자 패턴에 맞지 않는 ViewControllers간에 데이터를 전달하는 것입니다. "보기 컨트롤러간에 데이터 전달"에 대한 검색을 수행하십시오 - 아마도 당신이 찾고있는 것입니다. –

답변

0

@Anna Dickinson에서 영감을 얻어 조금 더 조사한 후에 문제의 해결책을 찾았습니다.

먼저 컨테이너는 스토리 보드에서 올바르게 주문해야합니다. View Controller가 델리게이트 프로토콜을 구현 한 컨테이너는 목록에서 첫 번째이고 다른 뷰 컨트롤러는 더 아래에 있어야합니다.

그런 다음 기본보기 컨트롤러 (컨테이너가있는보기의보기 컨트롤러)에서 컨테이너가 초기화 될 때 트리거되므로 prepareForSegue 함수가 구현됩니다.

이 모든 코드

위와 같이 남아 있지만 메인 뷰 컨트롤러는 다음과 같이 될 것입니다 : (가) 오른쪽도이 작업을 수행하는 가장 좋은 방법 인 경우

class MainViewController: UIViewController { 
    var actionVC : FirstViewController! // This is the one, that implements the delegate protocol 
    var tableVC : SecondViewController! // This is the one, that has a delegate variable 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if(segue.identifier == "firstVC"){ 
      self.actionVC = segue.destinationViewController as FirstViewController 
     } else if(segue.identifier == "secondVC"){ 
      self.tableVC = segue.destinationViewController as SecondViewController 
      self.tableVC.delegate = self.actionVC 
     } 
    } 
} 

잘 모르겠어요 그러나 그것은 내가 필요한 것에 완벽하게 작동합니다.

+0

이렇게 설정하려고했지만 "self.actionVC"는 나에게 아무런 의미가 없습니다. 그러나 기본 통화 대리인이 작동 중입니다. –

관련 문제