[Swift] 화면 이동 방법 요약

15065 단어 SwiftiOS
이번에는 Swift의 화면 이동에 대해 요약을 해봤습니다!

1. Segue를 사용한 화면 이동(코드를 사용하지 않는 방법)


Xcode에서 단추를 눌렀을 때 화면 이동을 하려는 경우 일반적으로 다음과 같이 Storyboard에서 Segue 연결 단추와 화면을 사용합니다.이렇게 하면 버튼을 눌렀을 때 화면 이동을 할 수 있다.

2. Segue를 사용하여 화면 마이그레이션(코드 사용)


1의 방법은, 예를 들어 라벨에 표시된 숫자가 5가 되면 옮길 수 없다.이렇게 해서 어떤 처리 후에 화면 이동을 하려면 Segue 외에 코드로 기술해야 한다.아래의 예에서 라벨에 표시된 문자가 5가 되면 다음 화면으로 이동합니다(대상 화면을 옮기는 것은 이해하기 쉽도록 배경색을 덧붙였습니다).

1. Segue로 ViewController 연결


Segue를 소스 ViewController에서 대상에 연결합니다.이때 Segue는 버튼이 아닌 ViewController에서 확장됩니다.

2. Segue에 identifier 추가


identifier는 Segue의 이름과 같다.코드를 사용하여 마이그레이션을 할 때 어떤 Segue를 사용하여 마이그레이션을 하는지 명확하게 표시해야 하기 때문에 잊지 말아야 합니다.

3. 코드 작성


다음 코드는 화면 이동 부분이다.withIdentifier의 부분에 2를 더한identifier를 넣는다.
self.performSegue(withIdentifier: "toSecond", sender: nil)
다음 코드 전문
import UIKit

class ViewController: UIViewController {

    @IBOutlet var numberLabel: UILabel!
    @IBOutlet var addNumberButton: UIButton!

    var number: Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func didTapButton() {
        number += 1
        numberLabel.text = String(number)
        if number == 5 {
            self.performSegue(withIdentifier: "toSecond", sender: self)
        }
    }
}

완성형은 이런 느낌이에요.

3. Segue를 사용하지 않는 화면 이동


1, 2 메서드는 Segue를 사용하므로 코드를 사용하여 부품을 생성할 경우 세 번째 메서드를 사용하여 화면 전환을 수행해야 합니다.

1. StorybordID 설치


Segue를 사용하지 않고 Storyboard를 실례화한 화면이기 때문에 Storyboard ID를 추가해야 합니다.선택을 잊지 마세요UseStoryboard ID.

2. 코드 작성


다음 부분은 화면 이동 코드입니다.withIdentifier 섹션은 1 더하기 Storyboard ID를 넣으십시오.
let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)
다음 코드 전문

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let addNumberButton = UIButton()
        addNumberButton.backgroundColor = UIColor.blue
        addNumberButton.setTitle("+", for: UIControl.State.normal)
        let viewWidth = self.view.frame.width
        let viewHeight = self.view.frame.height
        addNumberButton.frame = CGRect(x: viewWidth/2, y: viewHeight/2, width: 160, height: 80)
        addNumberButton.center = self.view.center
        addNumberButton.addTarget(self, action: #selector(didTapButton), for: .touchUpInside)
        self.view.addSubview(addNumberButton)

    }

    @objc func didTapButton() {
        let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
        self.present(secondViewController, animated: true, completion: nil)

    }

}
완성형

경품


3과 같은 코드를 사용하지 않는 화면 이동은 확장 준비가 편리하다.참고용으로만 제공하다.
import UIKit

protocol StoryBoardInstantiatable {}
extension UIViewController: StoryBoardInstantiatable {}

extension StoryBoardInstantiatable where Self: UIViewController {

    static func instantiate() -> Self {
        let storyboard = UIStoryboard(name: self.className, bundle: nil)
        return storyboard.instantiateInitialViewController() as! Self
    }

    static func instantiate(withStoryboard storyboard: String) -> Self {
        let storyboard = UIStoryboard(name: storyboard, bundle: nil)
        return storyboard.instantiateViewController(withIdentifier: self.className) as! Self
    }
}

protocol ClassNameProtocol {
    static var className: String { get }
    var className: String { get }
}

extension ClassNameProtocol {

    static var className: String {
        return String(describing: self)
    }

    var className: String {
        return type(of: self).className
    }
}

extension NSObject: ClassNameProtocol {}
이렇게 하면 다음과 같이 목표 화면을 실례화할 수 있다.

let controller = ViewController.instantiate()

좋은 웹페이지 즐겨찾기