質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1501閲覧

ボタンのtagの数値を遷移先のViewControllerに渡したいのですがやり方がわかりません。

mimamo

総合スコア44

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/12/01 08:41

編集2018/12/01 08:42

<前提>
ViewController,ViewController2というビューコントローラーを作り
ViewController.swift、ViewController2.swiftというファイルを作りました。

<やってみたこと>
資料をみながらやってみたのですが、UILabelを使わないためどう変更すればいいのかわかりませんでした。
参考資料

---やりたいこと---
ボタンにつけたtagの数値を遷移先のViewController2.swiftに渡したい。

<ViewController.swift>

Swift

1 2 @IBAction func action(_ sender: UIButton) { 3 //buttonに設定されたtag(変数)を取得 4 let tagnumber:UIButton = sender as UIButton 5 print("タグナンバーは(tagnumber.tag)です。") 6 } 7

<補足>
Swiftのversionは4.1.2
Xcodeのversionは9.4.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

引数が(_ sender: UIButton)ならば、senderには押されたUIButtonが送られてくるので、
.tagでアクセスしてint型の値を取得して、遷移先に送ってあげてみてください。

swift

1let tagNumber: Int = sender.tag 2 3// 受け側-値を受け取るInt型の変数を用意 4var tappedBtnTag: Int? 5 6// 遷移処理の中で用意した変数にアクセスしてtagNumberを渡す 7

ラベルに表示する場合はInt型をString型にキャストして設定してあげてみてください

追記 : こんなかんじでできませんか?

swift

1 2 3import UIKit 4 5// 遷移元VC 6class ViewController: UIViewController { 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view, typically from a nib. 11 } 12 13 14 // ボタンタップしてタグを取得、遷移する 15 @IBAction func tap(_ sender: UIButton) { 16 17 let tagNumber = sender.tag 18 19 // タグをsenderでprepareに送る 20 performSegue(withIdentifier: "go2ndVC", sender: tagNumber) 21 } 22 23 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 24 25 if segue.identifier == "go2ndVC" { 26 // 遷移先VCを取得して 27 if let secondVC = segue.destination as? SecondViewController { 28 //遷移先VCのプロパティにアクセス、senderで送られてきたタグをIntに変換して渡す 29 secondVC.tappedBtnTag = sender as? Int 30 } 31 } 32 } 33} 34 35 36// 遷移先のVC 37class SecondViewController: UIViewController { 38 39 // ここにタップされたボタンのタグが送られてくる 40 var tappedBtnTag: Int? 41 42 43 override func viewDidLoad() { 44 super.viewDidLoad() 45 // Do any additional setup after loading the view, typically from a nib. 46 47 // 取り合えすプリント、値が渡ってきていなければnil 48 print("### tappedBtnTag:", tappedBtnTag as Any) 49 50 } 51} 52

// 参考にされた資料の方法/ボタンから遷移先のVCにドラッグしてセグエを作ると画面遷移した後に、prepareが動くようですので、そういった場合は、セグエの作り方をVCからVCにドラッグして作るようにしてください。
イメージ説明

投稿2018/12/01 11:36

編集2018/12/02 02:48
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimamo

2018/12/01 12:20

ご回答ありがとうございます。 上記のコードを遷移元に入力し、遷移先に var tagNumber = "" を書き込めば受け取れるかと思ったのですが受け取れていないようでした。 <ViewController2.swift> // ViewControllerから受け取るための変数 var tagNumber = "" override func viewDidLoad() { super.viewDidLoad() print("受け取った番号=(tagNumber)")} エラーは表示されず実行もできましたが、printの部分は 受け取った番号= と表示されるだけでした。
mimamo

2018/12/01 13:33 編集

ありがとうございます。このようにして使っていくのですね。 ですが実行したところ、printしたものにはnilが表示されてしまいました。 ### tappedBtnTag: Optional(1) ### tappedBtnTag: nil 2018-12-01 22:24:54.212246+0900 challenge[14229:301206] Warning: Attempt to present <challenge.ViewController2: 0x7fe443c31510> on <challenge.ViewController: 0x7fe443d17ca0> whose view is not in the window hierarchy!
退会済みユーザー

退会済みユーザー

2018/12/01 13:48

2回プリントされてますが? 1回目は1が渡されてますね。
mimamo

2018/12/01 14:07

コードでは2回プリントするようにしていないのですが、なぜか二回プリントされてしまっているようです。 ですが遷移先に値を渡すことができ、その値から別の動作をさせることができました! 本当にありがとうございます。
mimamo

2018/12/02 05:33

そういうことだったんですね。最後の疑問まで丁寧に解説してくださりありがとうございます! 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問