최근에 내 프로젝트를 Swift로 업그레이드했으며 내 viewController에 대한 강력한 참조를 유지하면서 동적으로 XIB를 인스턴스화하는 방법을 찾으려고합니다. viewController의 문자열 표현을 사용하면 오타가 발생하기 쉽고 각 XIB 이름이 무엇인지 기억하기가 어려우며 내가 선택한 경우 XIB의 이름을 바꾸기가 매우 어려우므로 NSBundle.mainBundle().loadNibNamed("someXib")
을 호출해야하는 것을 싫어합니다.Swift : ViewController를 인스턴스화 할 때 XIB로드
, 나는 단지의 ViewController를 인스턴스화과 같이 밀어 것 :이 강하게 참조 내 viewcontrollers (및 관련 XIB을)에 나를 수
CRMyViewController *myVC = [CRMyViewController new];
[self.navigationController presentViewController:myVC animated:YES completion:nil];
하고 있다면 철자가 잘못되거나 이름 내 viewcontroller, 내 프로젝트는 단순히 컴파일되지 않습니다.
Swift-XIB를 참조하는이 방법을 시도해도 내보기가로드되지 않습니다. 그러나 나는 내 viewcontroler 내부에 간단하게 오버라이드 (override)에는 loadView가 원하는 것을 가까이 얻을 수있었습니다 : 내가 원하는
override func loadView() {
NSBundle.mainBundle().loadNibNamed("CRMyViewController", owner:self, options:nil)
}
이 가까운 한 번 난 단지 하드 코드 XIB 이름을 이후 (실제의 ViewController 내부) 그러나 나는 여전히보다 역동적 인 접근법을 선호합니다.
ViewController와 함께 Swift-XIB를 동적으로로드 할 수있는 방법이 있습니까? 내가 생각할 수있는 유일한 방법은보다 동적 인 방식으로에는 loadView를 내 자신의 기본의 ViewController를 작성하고 무시하는 것입니다
override func loadView() {
var className:NSString = NSStringFromClass(self.classForCoder)
className = className.componentsSeparatedByString(".").last as NSString
NSBundle.mainBundle().loadNibNamed(className, owner:self, options:nil)
}
의 ViewController와 함께 XIB를로드 할 수있는 더 나은 방법이 있습니까? 어떻게 이것이 신속하고 객관적이지 않은데 왜 필요합니까?
나는 확실히 당신의 질문의 첫 번째 부분을 이해하지 않습니다. 뷰 컨트롤러가 자신의 내부 코드에서 펜촉을로드하지 않으면 Objective C에서 새 뷰 컨트롤러를 인스턴스화하면 펜촉이로드되어서는 안됩니다. 스위프트에서는 별다른 변화가 없어야합니다. Swift에 방법이없는 것처럼 펜촉 이름을 지정하지 않고 펜촉을로드하는 방법은 없습니다. – bjtitus
그것이 내가 목표에서 매번 그것을하는 방법입니다. c. 내가하는 모든 것은 viewcontroller를 인스턴스화하고 그것을 표시하고 내 xib/view가 함께로드됩니다. 나는 위의 신속한 코드처럼 멋진 것을 할 필요가 없었다. – Oren
내가 틀렸어. nib 문서에는 뷰 컨트롤러와 관련 펜촉의 링크가 언급되어 있습니다. 나는 전에 그런 식으로 사용한 적이 없다. 깨지기 쉬운 것 같아. 나는 더 많이 파헤 치고, 계속하고있는 것을 보려고 노력할 것이다. – bjtitus