최신 Xcode/Swift/iOS.부모가 아닌 VC에서 포함 된 하위 VC를 업데이트 할 수 없음
나는 VC (TopBarVC라고 불리는)와 임베디드 세그 (segue)를 포함하는 마스터 VC (StartVC라고 불린다)를 가지고있다. 자식 VC에는 버튼을 누르면 세 번째 VC (CategoryPickerOverlayVC)로 모달 연결됩니다 (이 VC의보기는 범주 선택을위한 드롭 다운 상자의 역할을합니다). 옵션 자체는 세 개의 버튼으로 구성되어 드롭 다운 상자에서 선택
은@IBAction func CategoryFilterButtonPressed(_ sender: Any) {
performSegue(withIdentifier: "toCategoryPickerOverlay", sender: self)
}
, 선택된 버튼의 제목은 아동 VC에서 버튼의 제목 텍스트를 대체하는 데 사용되어야한다.
마스터 VC에서는 embedding segue가 발생하는 시점에서 prepareforsegue를 사용하여 자식 VC에 대한 참조를 변수 "topBarReference"에 저장합니다.
var topBarReference: TopBarVC?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "TopBarPane"{
topBarReference = segue.destination as? TopBarVC
}
}
그럼, 드롭 다운 상자에서 단추 옵션 중 하나를 클릭 3 VC에서, 버튼 제목 ("topBarReference"를 통해) 아동 VC에있는 버튼을 업데이트 할 prepareforsegue을 통해 전송됩니다 .
if segue.identifier == "unwindToStartVC"{
let vc = segue.destination as! StartVC
vc.topBarReference?.filterButtonText = ((sender as! UIButton).titleLabel?.text)!
}
세 번째 VC는 마스터 VC로 다시 연결됩니다. 하위 VC의 단추가 변경되면 Child VC의 변수 (filterButtonText)가 먼저 제목 텍스트로 설정되고이 변수가 Child VC의 viewDidAppear 메서드를 통해 단추 제목 텍스트를 설정하는 데 사용된다는 것을 추가해야합니다.
디버거를 사용할 때 Master VC의 viewDidAppear가 unwind (실행 후 viewDidAppear에서 진단 출력 프린트 콘솔을 배치하고 unwind segue 이후에 아무 것도 출력하지 않음) 후에 실행되지 않는 것으로 나타났습니다. 이 버튼을 업데이 트되지 설명 할 실현하지만 난 왜 viewDidAppear가 실행되지 않습니다 몰라.
나는 위임 프로토콜과 instantiateViewController (withString :)를 사용하지 않으려 고 노력했다. 모든 메소드가 동일한 결과를 생성합니다. 즉, 하위 VC의 단추가 갱신되지 않습니다. 오류는 표시되지 않습니다. 다른 모든 것은 예상대로 발생합니다.
내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?
둘 다 StartVC에 "임베드 된"경우, 즉 StartVC가 여전히 표시되면보기가 나타나지 않는 것으로 나타납니다. 알림을 사용해보세요. startVC에서 특정 알림을 수신하고 드롭 다운에서 옵션을 풀거나 선택할 때 해당 알림을 보냅니다. 알림 처리기 코드 안에 단추 제목을 업데이트하십시오. –
세 번째 VC는 포함되지 않은 별도의 VC입니다. – Rossco
"왜 viewDidAppear가 실행되지 않는지 전혀 알지 못합니다." 나는 이것이 @ShawnFrank이 너에게 말한 것이라고 생각한다. – matt