storyboard에 연결된 ViewController를 얻는 방법
12821 단어 R.swiftDependencyInjectionSwift
storyboard의 파일 이름과 ID 지정
준비를 위해
example.storyboard
파일을 만들고, ViewController를 배치하고, 스토리보드 ID를 씁니다. (화면 오른쪽)이니셜라이저에 값이 필요하지 않은 경우
이니셜라이저에 값이 필요하지 않은 경우라는 표현이 적절한지는 모릅니다.
let vc: UIViewController = UIStoryboard(name: "main", bundle: nil).instantiateViewController(identifier: "second")
이니셜라이저에 값이 필요한 경우
이니셜 라이저에 값이 필요한 경우,
class: UIViewController {
private let text: String
init?(coder: NSCoder, text: String) {
self.text = text
super.init(coder: coder)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
처럼 ViewController가 값이 없는 변수를 가지고 있는 경우를 가리킵니다.
let vc: UIViewController = UIStoryboard(name: "main", bundle: nil).instantiateViewController(identifier: "second") { coder in
return SecondViewController(coder: coder, text: "text")
}
storyboard의 파일 이름만 지정하고 initialViewController를 지정합니다.
준비를 위해
example.storyboard
파일을 만들고 ViewController를 배치한 다음 Is Initial ViewController를 선택합니다.이니셜라이저에 값이 필요하지 않은 경우
let vc: UIViewController = UIStoryboard(name: "main", bundle: nil).instantiateInitialViewController()!
이니셜라이저에 값이 필요한 경우
let vc: UIViewController = UIStoryboard(name: "main", bundle: nil).instantiateInitialViewController { coder in
return SecondViewController(coder: coder, text: "hoge")
}!
R.swift를 사용하여 initialViewController 지정
준비로 R.swift를 확장합니다.
import Rswift
public extension StoryboardResourceWithInitialControllerType {
@available(iOS 13.0, tvOS 13.0, *)
func instantiateInitialViewController<ViewController>(creator: ((NSCoder) -> ViewController?)? = nil) -> UIViewController? where ViewController: UIViewController {
UIStoryboard(resource: self).instantiateInitialViewController { coder in
creator?(coder)
}
}
@available(iOS 13.0, tvOS 13.0, *)
func instantiateViewController<ViewController>(identifier: StoryboardViewControllerResource<ViewController>,creator: ((NSCoder) -> ViewController?)? = nil) -> UIViewController where ViewController: UIViewController {
UIStoryboard(resource: self).instantiateViewController(identifier: identifier.description) { coder in
return creator?(coder)
}
}
}
이니셜라이저에 값이 필요하지 않은 경우
let vc: UIViewController = R.storyboard.main.instantiateInitialViewController()!
이니셜라이저에 값이 필요한 경우
let vc = R.storyboard.main.instantiateInitialViewController { coder in
return SecondViewController(coder: coder, text: "")
}!
R.swift를 사용하여 ID 지정
이니셜라이저에 값이 필요하지 않은 경우
let vc: UIViewController = R.storyboard.main.second()
이니셜라이저에 값이 필요한 경우
let vc: UIViewController = R.storyboard.weather.instantiateViewController(identifier: R.storyboard.weather.second) { coder in
return SecondViewController(coder: coder, text: "")
}
Reference
이 문제에 관하여(storyboard에 연결된 ViewController를 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Hyperbolic_____/items/66585fae617dd3229b4b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)