2016-11-21 2 views
0

나는 ViewController가있다.이 뷰 컨테이너는 2 개의 컨테이너 뷰를 생성하고 첫 번째 컨테이너에 테이블을 추가하고 두 번째 컨테이너에 HashtagPicker를 추가한다.부모로부터의 신속한 3 호출 함수

hashTagPicker에는 선택한 hashTags가 변경 될 때마다 호출되는 함수가 있습니다.

질문 : 태그가 변경 될 때마다 업데이트 테이블 함수를 호출하려고합니다. 컨테이너를 포함하는 클래스에 정의 된 hashtagclass 함수를 어떻게 호출 할 수 있습니까?

+1

당신은 vc B와 vc C를 포함하는 vc A를 가지고 있습니다. 당신은 무엇인가하고 그 후에는 vc C가 테이블보기를 업데이트하기를 원합니까? – Tj3n

+1

일반적인 방법은 참조 (프로토콜/위임 패턴) 또는 콜백 클로저를 부모에서 자식 컨트롤러로 전달하는 것입니다. – vadian

+0

@ Tj3n 네, 맞습니다. vc B는 새로운 해시 태그가 설정되었다고 말하면서 vc A에게 vc B에게 updateTable을 호출하도록 지시합니다. –

답변

4
당신은 대리자를 사용할 수 있습니다

/이

첫째을위한 프로토콜은 전화

class HashtagPicker : UIViewController 
{ 

    var delegate: HashTagPickerDelegate? 

} 

이제

protocol HashTagPickerDelegate { 

    func hastagPicked(hashtag:String) 
} 

지금 HashtagPicker 클래스에서이 프로토콜에 대한 객체를 생성하여 HashtagPicker 클래스 Protocol를 만들 사용자가 테이블보기에서 해시 태그를 선택할 때이 델리게이트 객체를 사용하는 프로토콜 메소드 (didSelectRow THOD)

delegate.hashtagPicked(pickedHashtag) 

당신이 용기를 사용하는 당신이 prepareForSegue에서 그것을 할 수 있고, HastagPicker에 대한 위임 객체로 parentView를 부모 뷰에

class ParentView:UIViewController, HashTagPickerDelegate 
{ 

} 

을 프로토콜을 등록하고 설정하는 것을 잊지 마세요 방법. 컨테이너 segue에 segue id를 설정하는 것을 잊지 마십시오.

func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) 
{ 
    if segue.identifier == "HastagPickerSegue" // use your segue id here 
    { 
    let hashtagPicker = segue.destinationViewController as! HashtagPickerView 
    hashtagPicker.delegate = self 
    } 
} 
+0

, 내가 무엇을 찾고 있었는지 고맙습니다. 내가 컨트롤러를 초기화하고 동시에 이것을 보여주기 때문에 나는 segue를 사용하지 않았다. 그래서 이것은 이것을 읽지 않는 사람에게 필요하지 않다. –

4

위 응답에서 설명한대로 대리인을 사용할 수 있습니다. 또는 알림을 사용할 수 있습니다. 여기 알림을 사용하는 솔루션이 있습니다. 모든

첫째 지금

func someActionToBePerformed() { 
    // this will be called when hashTag is changed 
    // do something when hashTag is changed 
} 

당신이 할 수처럼 될 것입니다 때문에 상기와 같은 이름의 당신의 부모의 ViewController에서 함수를 만들기의 ViewController의 viewDidLoad

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ParentViewController.someActionToBePerformed), name: "myNotification", object: nil) 

처럼 부모의 통지를 등록 해시 태그 viewController에서 알림을 게시하십시오. 너 이럴 때.

NSNotificationCenter.defaultCenter().postNotificationName("myNotification", object: nil)