프로그래밍 방식으로 다른 보기 컨트롤러/장면으로 신속하게 이동
다음 코드를 사용하여 프로그래밍 방식으로 다른 ViewController로 이동합니다.잘 작동하지만, 어떻게든 그것은 숨깁니다.navigation bar
이거 어떻게 고쳐요?(내비게이션 바는 다음을 포함하여 생성됩니다.)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)
스위프트 5
기본 모달 프리젠테이션 스타일은 카드입니다.상단에 이전 뷰 컨트롤러가 표시되고 사용자가 표시된 뷰 컨트롤러를 스와이프하여 제거할 수 있습니다.
기존 스타일을 유지하려면 표시할 뷰 컨트롤러를 다음과 같이 수정해야 합니다.
newViewController.modalPresentationStyle = .fullScreen
이는 프로그래밍 방식으로 생성된 컨트롤러와 스토리보드 방식으로 생성된 컨트롤러 모두에서 동일합니다.
스위프트 3
프로그래밍 방식으로 생성된 컨트롤러 사용
프로그래밍 방식으로 생성된 컨트롤러로 이동하려면 다음을 수행합니다.
let newViewController = NewViewController()
self.navigationController?.pushViewController(newViewController, animated: true)
StoryBoard가 생성한 컨트롤러 사용
식별자가 "newViewController"인 StoryBoard의 컨트롤러로 이동하려면 다음을 수행합니다.
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가 있습니다.각각의 화면이 있습니다.
앱이 시작되고 로그인 화면이 표시됩니다.로그인이 성공하면 앱이 Balance 화면을 엽니다.
다음은 보기와 같습니다.
로그인 성공은 다음과 같이 처리됩니다.
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이고, 이것은 첨부된 스크린샷과 같이 스토리보드 설정에 정의된 ID입니다.
'Balance'라는 용어와 대문자 'B'는 스토리보드 파일의 이름으로, 코드의 첫 줄에 사용됩니다.
우리는 코드에서 하드 코딩된 문자열을 사용하는 것이 매우 나쁜 관행이라는 것을 알고 있지만, 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
이를 위한 루트로 사용하고 이 새로운 내비게이션 컨트롤러를 제공합니다.
다른 방법은 보기 컨트롤러를 누르는 것입니다.
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
그것은 나를 위해 메인 스레드에서 실행될 것입니다.
다른 모든 답변이 좋습니다. 애니메이션 LaunchScreen을 만든 후 3~4초 동안 애니메이션을 만든 후 다음 작업은 홈 화면으로 이동하는 것이었습니다.나는 segges를 시도했지만, 그것이 목적지 보기에 문제를 일으켰습니다.그래서 마지막에 저는 AppDelegates의 Window 속성에 액세스하여 새 Navigation Controller 화면을 할당했습니다.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let homeVC = storyboard.instantiateViewController(withIdentifier: "HomePageViewController") as! HomePageViewController
//Below's navigationController is useful if u want NavigationController in the destination View
let navigationController = UINavigationController(rootViewController: homeVC)
appDelegate.window!.rootViewController = navigationController
대상 보기에서 탐색 컨트롤러를 사용하지 않으려면 다음과 같이 할당합니다.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let homeVC = storyboard.instantiateViewController(withIdentifier: "HomePageViewController") as! HomePageViewController
appDelegate.window!.rootViewController = homeVC
위의 코드는 잘 작동하지만, 만약 당신이 에서 탐색하고 싶다면.NSObject
할 수 없는 self.present
:
let storyBoard = UIStoryboard(name:"Main", bundle: nil)
if let conVC = storyBoard.instantiateViewController(withIdentifier: "SoundViewController") as? SoundViewController,
let navController = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController {
navController.pushViewController(conVC, animated: true)
}
언급URL : https://stackoverflow.com/questions/39450124/swift-programmatically-navigate-to-another-view-controller-scene
'programing' 카테고리의 다른 글
구성: 오류: MySQL include dir를 찾지 못했습니다. (0) | 2023.08.26 |
---|---|
문자열에서 모든 공백 제거 (0) | 2023.08.26 |
애플리케이션 상태 점검을 위해 /healthz를 사용하는 관습은 어디에서 유래되었습니까? (0) | 2023.08.26 |
schema_version에 선택 권한이 없습니까? (0) | 2023.08.26 |
Android:텍스트 보기:상단 및 하단의 간격 및 패딩 제거 (0) | 2023.08.26 |