UIViewController
에 UILabel
이 있고 "lbs"또는 "kg"중 하나를 표시해야합니다. 내 응용 프로그램은 첫 번째보기 컨트롤러를 통해 모달로 표시되는 설정 화면 (다른 UIViewController
)을 가지고 있으며 사용자는 두 단위 중 하나를 선택하고 기본 설정을 저장할 수 있습니다. 단위가 변경되고 모달 설정 화면이 닫히면 첫 번째보기 컨트롤러의 레이블을 새 단위 값으로 업데이트하려고합니다 (그러나 전체보기를 새로 고치지 않음). 나는 그것이 작동하게하는 방법을 알고 있다고 생각했지만 분명히 나는 그것을하지 않습니다.뷰 라이프 사이클에서 모달 UIViewController가 닫힌 후 컨트롤러를 업데이트하는 경우
내 모달 설정 화면에서 사용자가 단위를 선택할 수 있도록 UISegmentedControl
이 있습니다. 언제가 변경된,이 기능은 userDefaults
를 업데이트합니다
func saveUnitsSelection() {
if unitsControl.selectedSegmentIndex == 0 {
UserDefaultsManager.sharedInstance.preferredUnits = Units.pounds.rawValue
} else {
UserDefaultsManager.sharedInstance.preferredUnits = Units.kilograms.rawValue
}
}
그런 다음 그들은 가능성 설정 화면을 기각한다.
override func viewDidLoad() {
super.viewDidLoad()
let preferredUnits = UserDefaultsManager.sharedInstance.preferredUnits
units.text = preferredUnits
}
작동하지 않았다, 그래서 나는 viewWillAppear()
로 이동하고 그 중 하나가 작동하지 않았다 : 그래서, 나는 나의 첫 번째보기 컨트롤러에 viewDidLoad
이 추가되었습니다. 나는 약간의 조사와 일부 원시인 디버깅을했는데 처음으로 뷰를로드/표시 한 후에도이 함수들 중 어느 것도 호출되지 않는다는 것을 알았습니다. viewWillAppear
이 UINavigationController
에 의해 관리되는 UITableViewController
의 계층 구조 내에서 작업하는 경우 두 번째로 호출되지만 내 모달을 닫을 때 호출되지 않습니다. UIViewController
아래에 UIViewController
이 표시됩니다.
내가 좀이 시점에서 붙어 및 다음 시도 모르겠어요 : 는 여기에 내가 함께 일하고 있어요 뷰 계층입니다.
편집 2 : 이 사용자는 탐색 줄에 '완료'버튼을 활용할 수 그들이 할 때 dismissSettings()
기능은 설정보기 일축 :
class SettingsViewController: UITableViewController {
let preferredUnits = UserDefaultsManager.sharedInstance.preferredUnits
// some other variables set here
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.topItem?.title = "Settings"
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: .Plain, target: self, action: #selector(self.dismissSettings(_:)))
if preferredUnits == Units.pounds.rawValue {
unitsControl.selectedSegmentIndex = 0
} else {
unitsControl.selectedSegmentIndex = 1
}
}
func dismissSettings(sender: AnyObject?) {
navigationController?.dismissViewControllerAnimated(true, completion: nil)
}
}
는 어디 ('FUNC의 viewDidLoad를 추가 않았다 [가 잘못된 추측했다으로 이전 논의가 제거 남은])'? 뷰 컨트롤러에 있다면, Xcode는 당신이'override'를 선언하지 않았다고 불평해야하고 super를 호출해야합니다. 잘못된 클래스에 코드를 추가하는지 궁금합니다. –
또한 매우 구체적으로 볼 때 밑에있는 뷰 컨트롤러의 뷰 계층 구조를 설명 할 수 있습니까? 탐색 및/또는 탭 컨트롤러 내에 있습니까? –
죄송합니다. @AaronBrager. 'viewDidLoad'는 첫 번째 뷰 컨트롤러에 있습니다. 그리고 실수로 많은 코드를 제거 할 때'override'와'super.viewDidLoad'를 삭제했습니다. 나는 그것을 바로 잡았다. 또한 뷰 계층 구조의 스크린 샷을 추가했습니다. – Jim