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

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

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

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

Q&A

解決済

2回答

964閲覧

swift 一つのセルが全てのtableで反応してしまう

globalplus

総合スコア119

Swift

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

0グッド

0クリップ

投稿2018/08/30 13:09

編集2018/08/30 13:24

下の画像の様にtableと二つのviewcontrollerを結びました。

tableのそれぞれの欄に無名のbuttonを配置しそれをタップすると該当するviewcontrollerに繋がる様にしたいのですが、全てのbuttonが最初のviewcontrollerであるSecondSwitchViewContollerに繋がってしまいます。
これはtableがprototypeな為ですか?それとも何か原因がありますか?教えていただけたら嬉しいです。

イメージ説明

SecondViewController

1import UIKit 2import AVFoundation 3import GoogleMobileAds 4 5class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 6 7 8@IBAction func setting(_ sender: UIButton) 9 { 10 counter = counter + 1 11 print(counter) 12 13 if counter == 1{ 14 self.performSegue(withIdentifier: "nextView", sender: nil) 15 counter = 0 16 } 17 } 18@IBAction func setting(_ sender: UIButton) 19 { 20 counter = counter + 1 21 print(counter) 22 23 if counter == 1{ 24 self.performSegue(withIdentifier: "secondsetting", sender: nil) 25 counter = 0 26 } 27 }

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

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

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

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

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

xAxis

2018/08/30 13:18

コードを貼りましょう。
退会済みユーザー

退会済みユーザー

2018/09/01 08:27

cellの種類はStatic Cellsですか?Dynamic Prototypesですか?
退会済みユーザー

退会済みユーザー

2018/09/01 08:33

cellはDynamic Prototypesで、StoryboardのTableViewの上にObjectLibraryからTableViewCellを6回ドラッグ&ドロップしてませんか?
globalplus

2018/09/01 09:17

cellの種類はDynamic Prototypesです。6回ドロップしてます。その通りです。
退会済みユーザー

退会済みユーザー

2018/09/01 10:05

UIButtonとUISwitchも6回ドラッグ&ドロップして、settingViewControllerも6枚作ろうとしていませんか?
globalplus

2018/09/03 02:09

返信遅れてすみません。その通りです
退会済みユーザー

退会済みユーザー

2018/09/03 12:21 編集

狙ってやってるなら、狙い通りにすすめてください。わけもわからずやられてるなら、先ずは仕組みを学習してください。後者の場合に限ってですが、お絵かき帳のようにstoryboardを使っても動くものは出来上がりませんよ。
guest

回答2

0

ベストアンサー

添付いただいた画像だとsegueの設定等全体像が見えないのでなんともですが、以下のサイトとか参考になるんじゃないでしょうか?
https://k-sugi.sakura.ne.jp/it_synthesis/ios/4471/

投稿2018/08/30 13:22

Tomochika_Tomo

総合スコア166

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

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

globalplus

2018/08/31 07:19

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { if [条件] { performSegue(withIdentifier: "firstsetting", sender: self) } else { performSegue(withIdentifier: "secondsetting", sender: self) } } の条件の部分はどの様に書けば良いのでしょうか? Button(名前はfirstbutton)が押されると繋がるという意味で書きたいのですが、switchの様に.isOn(.isPushed)なんてのはありませんし、、、
Tomochika_Tomo

2018/08/31 15:06

参考として添付したURLそのままでなくても、UIButtonのtagプロパティに値を設定してあげて、ボタンタップイベントから得られるUIButtonのオブジェクト(sender)からtagを取得して振り分けとかでも良いかと思います。
globalplus

2018/09/01 06:23

@IBAction func firstbutton(_ sender: UIButton) { //buttonに設定されたtagを取得 let firstbutton:UIButton = sender print(firstbutton.tag) } @IBAction func secondbutton(_ sender: UIButton) { let secondbutton:UIButton = sender print(secondbutton.tag) } 調べてみたらこの様に書けとサイトに書いてあったのですが動きはいつもと同じでした(tag指定してないので当たり前だと思いましたが。。。)
globalplus

2018/09/01 07:08

@IBAction func firstbutton(_ sender: UIButton) { //buttonに設定されたtagを取得 let firstbutton:UIButton = sender print(firstbutton.tag) firstbutton.tag = 1 } @IBAction func secondbutton(_ sender: UIButton) { //buttonに設定されたtagを取得 let secondbutton:UIButton = sender print(secondbutton.tag) secondbutton.tag = 2 } こういう風に書いてみたのですが動きは変わらず。。
Tomochika_Tomo

2018/09/01 07:19

すいません、私の状況理解が足りていなかったです。 「cellForRowAt indexPath」の内部でUITableViewCellを生成する際に呼び出す、「dequeueReusableCell」のwithIdentifierにstoryBoardでfirstbuttonを配置しているセルのIdentifierのみを渡していませんか? その場合、firstbuttonを配置しているセルのみが生成されるため、secondbuttonを配置しているセルは生成されていません。そのため、どの行のボタンをタップしても、画面遷移が変らないのだと思います。
globalplus

2018/09/01 07:43

そうだと思います。tableviewのcellの上にButtonを置いてそれを遷移先のViewControllerにpresent modallyでidentifierを入力しています。現在一番上のButtonが全てのcellに反映されている状態です(cell上にそれぞれ名前の違うButtonを一応置いている状態です) ほかにどんなやり方がありますか?教えていただけたら嬉しいです。
Tomochika_Tomo

2018/09/02 01:20

決め打ちで良いのであれば、dequeueReusableCellの処理内でセルの行数により生成するセルを振り分ければ実装可能です。 ※1行目のセルの場合は"Cell1"のIdentifierのセルを生成、2行目の場合は"Cell2"のIdentifierのセルを生成といった具合です。 ただ、セルのレイアウトが全部の行で同じなのであれば、以下の方針で進められれば良いかなと思います。 ・カスタムセルの定義は1つだけ定義する。 ・カスタムセルのプロパティにボタンを定義しておく。 ・Segueの接続はボタンからではなく遷移元のViewControllerから紐づける。 ・dequeueReusableCellsでカスタムセルからボタンのオブジェクトにアクセスし、button.tagでボタンにタグ付けする。 ・ボタンタップ時、ボタンのタグにより遷移先の画面を振り分ける。
globalplus

2018/09/03 07:28

ご説明ありがとうございます。dequeuereusablecell について書いてあるお手本になる様なサイト等ご存知でしたら教えて頂けると助かります。
guest

0

prototype cellだからというわけではないように見えます。コードを見てないので推測ですが多分各々のボタンが区別されてないからでしょう。

投稿2018/08/30 13:20

xAxis

総合スコア1349

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問