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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

Q&A

解決済

1回答

3209閲覧

【Swift】ボタンタッチイベントの引数を正常に渡すことができない

dal

総合スコア38

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/10/10 02:00

編集2019/10/10 03:02

実現したいこと

テーブルビューのセクションに配置したボタンをタップすると、そのセクション番号が出力される。

悩み

ボタンをタップしたときに引数として渡すセクション番号が、なぜか全く別の数字に書き換わってしまう。

該当コード

swift

1 override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 2 // HeaderのViewを作成してViewを返す 3 let headerView = UIView() 4 headerView.backgroundColor = UIColor(red: 224/255, green: 255/255, blue: 224/255, alpha: 1) 5 6 let label = UILabel() 7 label.frame = CGRect(x: 15, y: 0, width: view.bounds.width - 70, height: 50) 8 label.text = list[section] 9 label.textColor = UIColor.black 10 11 let button = UIButton(type: .custom) 12 button.frame = CGRect(x: view.bounds.width - 40, y: 10, width: 30, height: 30) 13 button.layer.cornerRadius = 0.5 * button.bounds.size.width 14 button.clipsToBounds = true 15 button.backgroundColor = UIColor.green 16 button.setTitle("▷", for: .normal) 17 button.setTitleColor(UIColor.black, for: .normal) 18 button.layer.borderWidth = 0.5 19 button.layer.borderColor = UIColor.black.cgColor 20 button.addTarget(self, action: #selector(self.buttonPressed(section:)), for: .touchUpInside) 21 22 print(section) 23 24 headerView.addSubview(button) 25 headerView.addSubview(label) 26 return headerView 27 } 28 29 // ボタンを押した時 30 @objc func buttonPressed(section: Int) { 31 print(section) 32 }

出力内容

上に貼ったコードのprint()による出力がこちらです。
これは1つ目のボタンを押したときの動作になるので、本来は1405308067626240になるはずです。(どのボタンを押しても、この桁数の数字が現れます。)
なぜこんな数字になっているのか、原因がわかりません。

0 1 2 3 4 5 140530806762624

このaddTargetメソッドに何かおかしな点があるのでしょうか?

swift

1button.addTarget(self, action: #selector(self.buttonPressed(section:)), for: .touchUpInside) 2 print(section)

詳しい方がいましたら、教えていただきたいです。
よろしくお願いいたします。

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

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

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

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

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

takabosoft

2019/10/10 02:04

SwiftUIタグは関係無いので外してください。
dal

2019/10/10 05:08

ご指摘ありがとうございます。削除いたしました。
guest

回答1

0

ベストアンサー

addTargetのセレクタ経由で受け取れる引数はsender(送り主のインスタンス)だけです。
sectionを一旦buttonのtagなどに入れておけば、実現はできるでしょう。

以下未検証ですが、こんな感じで動くと思います。

swift

1 override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 2 // HeaderのViewを作成してViewを返す 3 let headerView = UIView() 4 headerView.backgroundColor = UIColor(red: 224/255, green: 255/255, blue: 224/255, alpha: 1) 5 6 let label = UILabel() 7 label.frame = CGRect(x: 15, y: 0, width: view.bounds.width - 70, height: 50) 8 label.text = list[section] 9 label.textColor = UIColor.black 10 11 let button = UIButton(type: .custom) 12 button.frame = CGRect(x: view.bounds.width - 40, y: 10, width: 30, height: 30) 13 button.layer.cornerRadius = 0.5 * button.bounds.size.width 14 button.clipsToBounds = true 15 button.backgroundColor = UIColor.green 16 button.setTitle("▷", for: .normal) 17 button.setTitleColor(UIColor.black, for: .normal) 18 button.layer.borderWidth = 0.5 19 button.layer.borderColor = UIColor.black.cgColor 20 button.tag = section 21 button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside) 22 23 print(section) 24 25 headerView.addSubview(button) 26 headerView.addSubview(label) 27 return headerView 28 } 29 30 // ボタンを押した時 31 @objc func buttonPressed(_ sender: UIButton) { 32 print(sender.tag) 33 }

投稿2019/10/10 02:08

takabosoft

総合スコア8356

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

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

dal

2019/10/10 05:09

できました...!! 助かりました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問