Swift는 프로그래밍 방식으로 다른 뷰 컨트롤러 / 장면으로 이동합니다.
프로그래밍 방식으로 다른 ViewController로 이동하기 위해 다음 코드를 사용하고 있습니다. 잘 작동하지만 navigation bar. 이 문제를 어떻게 해결합니까? (탐색 표시 줄이를 embeding에 의해 만들어진 ViewController의 navigation controller경우 그 문제.)
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("nextView") as NextViewController
self.presentViewController(nextViewController, animated:true, completion:nil)
Swift 3에서
프로그래밍 방식으로 생성 된 컨트롤러 사용
프로그래밍 방식으로 생성 된 컨트롤러로 이동하려면 다음을 수행하십시오.
let newViewController = NewViewController()
self.navigationController?.pushViewController(newViewController, animated: true)
StoryBoard에서 만든 컨트롤러로
식별자 "newViewController"를 사용하여 StoryBoard에서 Controller로 이동하려면 다음을 수행하십시오.
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController
self.present(newViewController, animated: true, completion: nil)
SWIFT 4.x
큰 따옴표로 묶인 문자열은 항상 나를 혼란스럽게하므로이 질문에 대한 답변은이를 해결하기 위해 그래픽 표현이 필요하다고 생각합니다.
은행 앱의 경우 LoginViewController 및 BalanceViewController가 있습니다. 각각의 화면이 있습니다.
앱이 시작되고 로그인 화면이 표시됩니다. 로그인이 성공하면 앱이 잔액 화면을 엽니 다.
어떻게 보이는지 :
로그인 성공은 다음과 같이 처리됩니다.
let storyBoard: UIStoryboard = UIStoryboard(name: "Balance", bundle: nil)
let balanceViewController = storyBoard.instantiateViewController(withIdentifier: "balance") as! BalanceViewController
self.present(balanceViewController, animated: true, completion: nil)
보시다시피 소문자로 된 스토리 보드 ID 'balance'는 코드의 두 번째 줄에있는 것이며, 첨부 된 스크린 샷과 같이 스토리 보드 설정에 정의 된 ID입니다.
대문자 'B'가있는 'Balance'라는 용어 는 코드의 첫 번째 줄에 사용되는 스토리 보드 파일 의 이름입니다 .
우리는 코드에서 하드 코딩 된 문자열을 사용하는 것이 매우 나쁜 습관이라는 것을 알고 있지만 어떻게 든 iOS 개발에서는 일반적인 관행이되었으며 Xcode는 이에 대해 경고하지 않습니다.
존재하지 않는 현재 탐색 컨트롤러를 사용하여 새 뷰 컨트롤러를 푸시해야합니다.
self.navigationController.pushViewController(nextViewController, animated: true)
그의 대답 에 @jaiswal Rajan에 따르면 . 다음과 같이 pushViewController를 수행 할 수 있습니다.
let storyBoard: UIStoryboard = UIStoryboard(name: "NewBotStoryboard", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "NewViewController") as! NewViewController
self.navigationController?.pushViewController(newViewController, animated: true)
따라서 뷰 컨트롤러를 제시하면 내비게이션 컨트롤러에 표시되지 않습니다. 전체 화면이 표시됩니다. 이 경우 다른 탐색 컨트롤러를 만들고 nextViewController이를위한 루트로 추가 하고이 새 navigationController를 제공해야합니다.
또 다른 방법은 뷰 컨트롤러를 누르는 것입니다.
self.presentViewController(nextViewController, animated:true, completion:nil)
자세한 내용은 Apple 설명서를 확인하십시오 .- https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/doc/uid/TP40006926-CH3-SW96
OperationQueue.main.addOperation {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "Storyboard ID") as! NewViewController
self.present(newViewController, animated: true, completion: nil)
}
그것은 나를 OperationQueue.main.addOperation위해 메인 스레드에서 실행 되는 코드를 내부에 넣었을 때 나를 위해 일했습니다 .
'program story' 카테고리의 다른 글
| 백그라운드 / 분리 된 SSH 세션을 어떻게 종료합니까? (0) | 2020.12.06 |
|---|---|
| NSDate 개체에서 UTC 시간 및 현지 시간 가져 오기 (0) | 2020.12.06 |
| JavaScript에서 JSON 찾기 (0) | 2020.12.06 |
| 내 Mac에서 Python easy_install이 작동하지 않는 이유는 무엇입니까? (0) | 2020.12.06 |
| 내용을 감싸지 않는 이미지보기 (0) | 2020.12.06 |

