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

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

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

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

Swift

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

Q&A

解決済

2回答

3029閲覧

swift3.0でUISwitchの制御について

minoossp

総合スコア42

Xcode

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

Swift

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

0グッド

0クリップ

投稿2016/11/14 09:44

編集2016/11/15 07:53

説明が足りないと指摘がありました

みなさんすいませんでした

「テーブルビューでセルにUISwitchをつけている場合の制御はどうしたらいいですか?

セルのパーツはタグナンバーをつけています」

やりたいこと
テーブルビュー内でセルの追加を押した際
日付とテキストとUISwitchの結果をアプリ内(Userdefault)に保存して
テーブルビューで再表示(Userdefaultのデータを表示)したいです

日付とテキストに関しては
配列をUserdefault内に入れ
表示できるところまではできたのですが
UISwitchのBoolの値がうまく制御できません
UISwitchを管理配列内で再表示するには
どういった方法で保存・編集・再表示すればいいですか?

自分なりにやったこと
UISwitchのBool値を配列に入れたのですが
その配列をセルの各UISwitchに反映できない状態
他にも色々やったのですが
どうしてもうまくいきません

配列から各UISwitchを更新
スイッチをON・offした時際に再度配列内の
データを上書きするにはどうしたらいいでしょうか?

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

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

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

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

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

fuzzball

2016/11/14 23:48

UISwitch自体の扱い方は理解されているのでしょうか?
guest

回答2

0

ベストアンサー

テーブルビューで制御というのは、どのせるからのスイッチかを判別できるようにするということでしょうか?
タグを付けなくても、テーブルビューにはその座標からindexPathを求める方法があります。
例えば、ボタンだと、
func cellbuttonPressed(sender:UIButton){
let cellPoint = collectionView.convert(sender.center, from: sender.superview)
let indexPath = collectionView.indexPathForItem(at: cellPoint)
}
どのセルのボタンがタップされたのかはindexPath.rowでいつも通り判別できます。

投稿2016/11/14 22:04

編集2016/11/15 00:30
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

minoossp

2016/11/15 07:30

回答ありがとうございます。 初心者マークつけるの忘れていましたのでお詫びします。 座標からindexPathを求める方法を試したのですが let cellPoint = collectionView.convert(sender.center, from: sender.superview) let indexPath = collectionView.indexPathForItem(at: cellPoint) 「collectionView」ここでエラー(use of unresolved identifier)が出るのですが どのようにを宣言したらいいのかわかりません。 何卒よろしくお願いします。
退会済みユーザー

退会済みユーザー

2016/11/15 11:09

あ、申し訳ないです。変数がコレクションビューになってました。まあ、テーブルビューでも同じです。 いつも通りテーブルビューを配置します。 次に、カスタムセルを作ります。カスタムセルの中にswitch1を入れたとします。 cellForRowのところでcell.switch1.addtargetでスイッチが押された時にメソッドを実行するようにします。 func cellbuttonPressed(sender:UIButton){ let cellPoint = tableView1.convert(sender.center, from: sender.superview) let indexPath = tableView1.indexPathForRow(at: cellPoint) }
退会済みユーザー

退会済みユーザー

2016/11/15 11:17

私の国語力が足りないもので済みません。 テーブルビューとUISwitchの組み合わせができないのか、 UISwitchの使い方自体が分からないのか、 配列の操作が分からないのか、 もしくはその他なのか教えて頂けないでしょうか?
minoossp

2016/11/15 14:45

やりたいことは Bool値の取得の際スイッチの位置情報を 配列に入れてUserdefaultで一度保存してから 保存した配列からテーブルビューに反映がしたいのです テキストビューはできているのですが 各スイッチのBool値が取得して、取得したBool値とスイッチの位置情報を 配列からスイッチに反映させることができていない状態です 申し訳ありません。 何度もお手間とらせて 説明不足お詫びします。
minoossp

2016/11/15 15:29

ありがとうございます。 無事‥スイッチの位置情報を取得できました。 コードに入れたところ 問題点が全て解決できました。 SilvarRiceさん本当にありがとうございました。 他にも回答いただいた方々もありがとうございました。
guest

0

追加・修正欄は使いづらいので、こちらで質問します。

UISwitchのBool値を配列に入れたのですが
その配列をセルの各UISwitchに反映できない状態

テキストは出来ているんですよね?
テキストをUILabel(でしょうか?)に設定するのと同じように、Bool値をUISwitchに設定してやればいいと思うのですが。

indexPathForCellを使ってみる

SilvarRiceさんの回答で使われているindexPathForRowAtPointとは別に、もう一つindexPathを取得する関数がありますので、それを使った回答を書いておきます。(Swift2ですみません)

swift

1@IBAction func valueChanged(sender: UISwitch) { 2 if let 3 cv = sender.superview, //UISwitchのsuperviewはcontentView 4 cell = cv.superview as? UITableViewCell, //contentViewのsuperviewはセル 5 indexPath = tableview.indexPathForCell(cell) //セルを指定してindexPathを取得 6 { 7 print(indexPath) 8 //=> <NSIndexPath: 0xc000000000200016> {length = 2, path = 0 - 1} 9 } else { 10 print("ここには来ないはず?") 11 } 12}

投稿2016/11/15 08:18

編集2016/11/16 00:15
fuzzball

総合スコア16731

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

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

minoossp

2016/11/15 15:36

回答ありがとうございます。 問題解決しました。 テキストはindexPath.rowが使えるところで コードを書いていたため 問題にならなかったのですが スイッチアクション内で使用できないのが問題だったみたいです。 もっとわかりやすく質問できるように勉強します。 ありがとうございました。
fuzzball

2016/11/16 00:15 編集

今回はタグを他の用途に使っているようなのでダメっぽいですが、cellForRowAtIndexPathの中で、sw.tag = indexPath.row として保存しておけば、いつでもどこでもindexPath.rowを参照出来ます。 p.s. おまけで回答に追記しておきました。
minoossp

2016/11/16 06:22

ありがとうございます。 今後参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問