Xcode8 Swift3에서 스토리 보드를 사용한 화면 전환
할 일
Swift에서 스토리 보드를 사용한 화면 전환
우선 간단한 화면 천이라고 하는 것으로, 화면 천이전에 입력 체크를 해, 다음의 화면에 값을 건네주고, 화면 천이처에서 받은 값을 표시한다
개발 환경
Xcode 8
Swift 3
프로젝트 구성
이번 편집한 것은, 이하의 3 파일
Storyboard 설정
UIViewController를 2개 작성해, 각각 후술하는
FirstViewController
, SecondViewController
라고 끈다FirstViewController
에는 다음의 3 개의 컨트롤을 배치SecondViewController
에는 다음의 3 개의 컨트롤을 배치화면 전환 설정
FirstViewController
의 '인사' 버튼을 control
키를 누른 상태에서 SecondViewController
위에서 만든 Segue의 identifier에 이름을 붙인다.
출처
FirstViewController.swift
import Foundation
import UIKit
class FirstViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var greetingType: UIPickerView!
@IBOutlet weak var greetingTo: UITextField!
let greetingTypes = ["おはよう", "こんにちは", "こんばんは"]
var selectedGreetingType: String = ""
override func viewDidLoad() {
super.viewDidLoad()
}
/// 画面遷移するかの判定処理
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if (identifier == "toSecondSegue") {
if (self.greetingTo.text?.isEmpty)! {
let alert = UIAlertController(title: "入力エラー", message: "名前を入力してください", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default))
self.present(alert, animated: true, completion: nil)
return false;
}
}
return true;
}
/// 画面遷移時の処理
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "toSecondSegue") {
let secondViewController:SecondViewController = segue.destination as! SecondViewController
let selectedRow = self.greetingType.selectedRow(inComponent: 0)
secondViewController.greetingType = self.greetingTypes[selectedRow]
secondViewController.greetingTo = self.greetingTo.text!
}
}
/// Storyboadでunwind sequeを引くために必要
@IBAction func unwindToFirstView(segue: UIStoryboardSegue) {
}
/// 以下は挨拶選択を作成している
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return greetingTypes.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return greetingTypes[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.selectedGreetingType = greetingTypes[row]
}
}
화면 천이 판정
show
가 화면 천이 판정용의 메소드로, false 를 되돌리면 화면 천이를 취소한다파라미터의
shouldPerformSegue(withIdentifier)
에 Storyboard로 Segue에 붙인 값을 받을 수 있으므로, 화면 천이처가 복수 있는 경우는, 이 값으로 처리를 분기시킨다이번에는 이름(Text Field)이 입력되어 있지 않은 경우, 경고를 내고 화면 천이를 중지한다
화면 전환 처리
identifier
가 화면 천이시의 메소드파라미터의
prepare(for segue)
가 화면 천이처의 객체가 되어 있어 이전과 같이 segue
로 천이처를 판정하는지, 목적지를 판단할 수도 있다이번은
segue.identifier
로 천이처를 특정해, segue.destination
를 천이처의 segue.identifier
클래스에 캐스트 해 필요한 값을 건네준다전환 목적지에서 복귀 처리
segue.destination
는 Storyboard로 돌아가는 선을 그리는 데 필요한 메소드SecondViewController
를 붙인 메소드로 파라미터를 unwindToFirstView
로 한다(메서드명은 자유롭게 붙일 수 있다)닫는 처리 등은 특별히 기술할 필요가 없기 때문에, 돌려줄 때의 처리가 특별히 필요하지 않으면 메소드는 비어 있는 채로 좋다
뒤로 버튼이 있다.
메서드를 만들면 Storyboard를 열고
@IBAction
의 '뒤로' 버튼을 segue: UIStoryboardSegue
선택SecondViewController.swift
import Foundation
import UIKit
class SecondViewController: UIViewController {
@IBOutlet weak var greetingLabel: UILabel!
var greetingType: String = ""
var greetingTo: String = ""
override func viewDidLoad() {
super.viewDidLoad()
self.greetingLabel.text = String(format: "%@ %@さん", self.greetingType, self.greetingTo)
}
}
전환 대상
화면 전이시의 값을 받을 수 있도록
SecondViewController
, FirstViewController
의 2 개의 변수를 선언해 두고,완성된 것
화면 시작 시
그대로 「인사」하는 버튼을 탭(입력 에러)
인사를 철회하고 이름도 입력
화면 전환
Reference
이 문제에 관하여(Xcode8 Swift3에서 스토리 보드를 사용한 화면 전환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masch/items/15e648a48351b8377439텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)