iOSアプリでセグエを使ってビューを切り替えてみる
iOSアプリでセグエを使ってビューを切り替えてみる。
【参考】 Swiftでセグエを利用した画面遷移 - Qiita http://qiita.com/tajihiro/items/45c7adf2ef15df79bbf1
「show」以外にも色々あるが、まだ良くわかっていない。 [Xcode 6] セグエの名前が新しくなりました | Developers.IO http://dev.classmethod.jp/references/xcode-6-segue/ segue - swift Segueの種類について - スタック・オーバーフロー http://ja.stackoverflow.com/questions/17290/swift-segue%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
Main.storyboardのxmlを見ると、下記のような感じでsegueのタグが追加されている。
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <document ・・・> ・・・ <scenes> <!--View Controller--> <scene ・・・> <objects> <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="sample" customModuleProvider="target" sceneMemberID="viewController"> ・・・ <view ・・・> ・・・ <subviews> <button ・・・> ・・・ <connections> <segue destination="AWU-rU-sZq" kind="show" id="eNg-p1-agv"/> </connections> </button> </subviews> ・・・ </view> </viewController> ・・・ </objects> </scene> <!--View Controller--> <scene ・・・> <objects> <viewController id="AWU-rU-sZq" sceneMemberID="viewController"> ・・・ </viewController> ・・・ </objects> ・・・ </scene> </scenes> </document>
パラメータを渡してみる
次に、遷移先のビューにパラメータを渡すパターンを試してみる。
まずは、2つ目のビュー用のクラスを用意する。
[Cocoa Touch Class]を選択する。
適当にクラス名を入力し、「UIViewController」を選択すると、
2つ目のViewを選択して、「ViewController2」を設定する。
これで、2つ目のビューとViewController2のクラスが紐付けられる。
続いて、二つ目のビューに、パラメタ受け取りの設定をする。
受け取りようの変数を追加し、
// 受け取り用の変数 var ccc:String? = ""
受け取ったパラメタをラベルに設定するよう、viewDidLoadに下記の処理を追加する。
// 画面遷移の前にテキストフィールドの値を設定 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ let view2:ViewController2 = segue.destinationViewController as! ViewController2 view2.ccc = aaa.text }
これで、ViewController2で受け取ったパラメタをラベルに表示できるようになる。
最後に、テキストフィールドのパラメタを2つ目のビューに渡すよう修正する。
下記の処理を追加し、画面遷移前にテキストフィールドの値を、2つ目のビューのパラメタに設定する。
// 画面遷移の前にテキストフィールドの値を設定 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){ let view2:ViewController2 = segue.destinationViewController as! ViewController2 view2.ccc = aaa.text }
asの後ろに「!」が無いとエラーになる。まだswiftの文法がよく分からない。