Swift에서 ViewController를 해제하는 방법
Controller를 호출해야 합니다.dismissViewController
an IBAction
@IBAction func cancel(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
@IBAction func done(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
콘솔 출력에서 println 메시지를 볼 수 있었지만 ViewController는 해제되지 않습니다.뭐가 문제죠?
이미지를 보니 푸시를 사용하여 View Controller를 제시한 것 같습니다.
dismissViewControllerAnimated
는, 의 ViewController 를 사용해 제시된 ViewController 를 합니다.
스위프트 2
navigationController.popViewControllerAnimated(true)
스위프트 4
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
당신의 문제에 대한 해결책이 있습니다.모드를 사용하여 보기를 표시하는 경우 이 코드를 사용하여 보기 컨트롤러를 해제하십시오.
스위프트 3:
self.dismiss(animated: true, completion: nil)
또는
"밀어서" segue를 사용하여 보기를 표시하는 경우
self.navigationController?.popViewController(animated: true)
이렇게 하면 콘솔에 println 메시지가 표시되지 않을 수 있습니다.
@IBAction func cancel(sender: AnyObject) {
if(self.presentingViewController){
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
}
@IBAction func done(sender: AnyObject) {
if(self.presentingViewController){
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
}
Swift 3.0 ~ 4.0 에서는, 다음의 조작을 간단하게 실시할 수 있습니다.
self.dismiss(animated: true, completion: nil)
또는 내비게이션 컨트롤러에 있는 경우 "팝업"할 수 있습니다.
self.navigationController?.popViewController(animated: true)
- 해제할 보기를 Navigation Controller에 포함시킵니다.
- "Done"을 식별자로 하는 BarButton을 추가합니다.
- Done 버튼을 선택한 상태에서 Assistant Editor를 호출합니다.
- 이 단추에 대한 IBAtion 만들기
다음 행을 괄호에 추가합니다.
self.dismissViewControllerAnimated(true, completion: nil)
용도:
self.dismiss(animated: true, completion: nil)
다음 대신:
self.navigationController.dismissViewControllerAnimated(true, completion: nil)
Navigation Controller를 사용하지 않고 컨트롤러를 제시하면 제시된 컨트롤러의 메서드에서 다음 코드를 호출할 수 있습니다.
self.presentingViewController?.dismiss(animated: true, completion: nil)
View Controller가 모듈식으로 표시되는 경우 옵션의 presenting View Controller가 0이 되지 않고 코드가 실행됩니다.
Apple 문서:
프레젠테이션 뷰 컨트롤러는 자신이 제시한 뷰 컨트롤러를 해제하는 역할을 합니다.
따라서 스스로 해고 방법을 호출하는 것은 잘못된 관행이다.
모달의 경우 다음 사항을 제시해야 합니다.
presentingViewController?.dismiss(animated: true, completion: nil)
지금까지의 경험에 근거해, UIViewController 에의 확장으로서 나를 해제하는 방법을 추가합니다.
extension UIViewController {
func dismissMe(animated: Bool, completion: (()->())?) {
var count = 0
if let c = self.navigationController?.viewControllers.count {
count = c
}
if count > 1 {
self.navigationController?.popViewController(animated: animated)
if let handler = completion {
handler()
}
} else {
dismiss(animated: animated, completion: completion)
}
}
}
이 하여 뷰 한다.UIViewController
「의 예를 , 다음과 같습니다." " " , " " " " :
class MyViewController: UIViewController {
...
@IBAction func cancel(sender: AnyObject) {
dismissMe(animated: true, completion: nil)
}
...
}
따라서 push presented viewController를 사용했기 때문에
self.dismiss(animated: false, completion: nil)
따라서 View 컨트롤러를 해제하려면 이것을 사용하십시오.이 코드는 VC를 해제하는 버튼 동작으로 작성됩니다.
@IBAction func cancel(sender: AnyObject) {
dismiss(animated: true, completion: nil)
}
Cancel 또는 Done에서 다른 VC로 segue를 생성하지 말고 이 코드를 버튼 @IBAtion으로만 작성하십시오.
@IBAction func cancel(sender: AnyObject) {
dismiss(animated: false, completion: nil)
}
현재 뷰 컨트롤러를 해제하고 이전 뷰 컨트롤러로 되돌리는 방법은 다음과 같습니다.Storyboard를 통해서만 가능합니다.
- 스토리보드 열기
- [취소] 버튼을 오른쪽 클릭하여 이전 뷰 컨트롤러로 드래그하여 이전 컨트롤러로 되돌립니다.
- 이제 오른쪽 클릭을 놓으면 취소 버튼에서 수행되는 몇 가지 작업을 볼 수 있습니다.
- 이제 목록에서 "팝오버 표시" 옵션을 선택하십시오.
- 이제 취소 버튼을 클릭하여 현재 보기를 해제할 수 있습니다.
이거 한 번 해봐, 나한테 잘 돼.
두 번째 방법 - 사용 -navigationController.popViewControllerAnimated(true)
행운을 빈다.
참고로 잘못된 뷰 컨트롤러를 해제하고 있을 수 있습니다.예를 들어, 다른 모달 위에 알림 상자 또는 모달이 표시되는 경우.(예를 들어 현재 모드 경보 위에 Twitter 게시물 경보가 표시될 수 있습니다).이 경우 해제를 두 번 호출하거나 언인드세그를 사용해야 합니다.
이것을 시험해 보세요.
@IBAction func close() {
dismiss(animated: true, completion: nil)
}
부모 VC에서 현재 메서드를 사용하는 경우 이 함수를 호출하여 자녀 VC를 해제해야 합니다.
self.dismiss(animated: true, completion: nil)
푸시 메서드를 사용하여 하위 VC를 호출하는 경우 하위 VC를 해제하려면 이 명령을 사용합니다.
self.navigationController?.popViewController(animated: true)
ViewController를 모듈식으로 표시하고 루트 ViewController로 돌아가려면 루트 ViewController로 돌아가기 전에 이 모듈식으로 표시된 ViewController를 해제해야 합니다. 그렇지 않으면 이 ViewController가 메모리에서 제거되지 않고 메모리 누수가 발생합니다.
Swift 3.0의 경우
표시된 뷰 컨트롤러를 해제하려면
self.dismiss(animated: true, completion: nil)
Swift 4.1 및 Xcode 9.4.1의 경우
pushViewController를 사용하여 새 뷰 컨트롤러를 표시하는 경우 다음을 사용하십시오.
self.navigationController?.popViewController(animated: false)
@IBAction func back(_ sender: Any) {
self.dismiss(animated: false, completion: nil)
}
언급URL : https://stackoverflow.com/questions/24668818/how-to-dismiss-viewcontroller-in-swift
'programing' 카테고리의 다른 글
여러 열에서 최소값을 선택하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.17 |
---|---|
WPF DataGrid에서 붙여넣기 데이터를 복사할 때 OpenClipboard가 실패했습니다. (0) | 2023.04.17 |
텍스트 파일을 Excel 시트로 가져오는 중 (0) | 2023.04.17 |
C# EPplus OpenXML의 행 수 (0) | 2023.04.17 |
Excel 워크북의 모든 워크시트를 data.frames와 함께 R 목록으로 읽습니다. (0) | 2023.04.17 |