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

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

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

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

Swift

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

Q&A

解決済

2回答

506閲覧

UISwitch.UIButtonについて

Udemy.seitaro

総合スコア11

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/06/25 15:56

おはようございます
いつもお世話になっています。
いつも教えてくださる型ありがとうございます。
今回質問したい事が3つほどございまして記載させていただきます。
答えていただける方いましたらよろしくお願い致します。

1 下のコードを見ていただくとわかると思うのですが、今現在UISwitchをUITableViewCellと同じ数だけ表示するという風に記載していると思うのですが、もしUISwitchを最上段のTabelViewCellだけに表示するとなるとどのように行うのでしょうか

2 また、最上段以外UIButtonを設置したいと思うのですがそのやり方等ございましたら教えていただけないでしょうか。

3 最後に質問なのですが、switchはIBActionで繋いでいないので関数名がないと思うのですが一つ一つの動作を記載する為にはどのように行えばいいのでしょうか。

数が多くなってすみません。
答えていただける方いましたらよろしくお願い致します。

ViewCOntroller

1import UIKit 2 3class ConfigurationViewController: UIViewController,UITableViewDelegate { 4 5 6 7 private var tableView = UITableView() 8 private var items: [String] = ["パスワードを設定", "パスワードの変更", "名前の変更", "フィールドバック", "このアプリの使い方", "ログアウト"] 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 tableView.frame = view.bounds 13 tableView.dataSource = self 14 view.addSubview(tableView) 15 16 17 18 } 19 20 21 22 23} 24 25extension ConfigurationViewController: UITableViewDataSource { 26 27 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 28 return items.count 29 } 30 31 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 32 let cell = UITableViewCell() 33 cell.textLabel?.text = items[indexPath.row] 34 35 36 //Switchの追加 37 let switchView = UISwitch(frame: .zero) 38 switchView.setOn(false, animated: true) 39 switchView.tag = indexPath.row 40 cell.accessoryView = switchView 41 42 return cell 43 } 44 45 46} 47 48 49

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

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

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

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

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

guest

回答2

0

ベストアンサー

1 下のコードを見ていただくとわかると思うのですが、今現在UISwitchをUITableViewCellと同じ数だけ表示するという風に記載していると思うのですが、もしUISwitchを最上段のTabelViewCellだけに表示するとなるとどのように行うのでしょうか

indexPath.rowの値を見て切り替えることになるかと思います。

2 また、最上段以外UIButtonを設置したいと思うのですがそのやり方等ございましたら教えていただけないでしょうか。

UISwitchと同じような感じで、UIButton を使って行えると思います。

ただ、iOSのデザイン的には TableView のセルにボタンを配置することは少ないのではないかと思います。

たとえば、iOS の「設定」アプリは、セルにボタンを配置するのではなく、セルを選択することで次の動作を行わせるようにデザインされています。

そのときに、例えば選択可能なセルのアクセサリをcell.accessoryType = .disclosureIndicatorといった感じで設定し、>を表示させることで次の設定があるということを暗に促しています。

とりあえず、下記のコードではボタンを配置する例を挙げておきますのでご確認ください。

3 最後に質問なのですが、switchはIBActionで繋いでいないので関数名がないと思うのですが一つ一つの動作を記載する為にはどのように行えばいいのでしょうか。

addTarget(:action:for:)を使って UI 部品ごとに呼ばれた時の処理や呼ぶ条件を設定することになります。

簡単なコメントはコード中に入れていますが、これらのコードは公式、非公式含めネット上にもたくさんありますので、それらの資料を合わせて読み解かれるのが良いかと思います。

Swift

1import UIKit 2 3class ConfigurationViewController: UIViewController,UITableViewDelegate { 4 private var tableView = UITableView() 5 private var items: [String] = ["パスワードを設定", "パスワードの変更", "名前の変更", "フィールドバック", "このアプリの使い方", "ログアウト"] 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 tableView.frame = view.bounds 10 tableView.dataSource = self 11 view.addSubview(tableView) 12 } 13} 14 15extension ConfigurationViewController: UITableViewDataSource { 16 17 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 18 return items.count 19 } 20 21 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 22 let cell = UITableViewCell() 23 cell.textLabel?.text = items[indexPath.row] 24 25 // MARK: 表示するセルの番号は indexPath.row で調べる 26 if indexPath.row == 0 { 27 //Switchの追加 28 let switchView = UISwitch(frame: .zero) 29 switchView.setOn(false, animated: true) 30 switchView.tag = indexPath.row 31 // MARK: UISwitch が選択された時の動作を定義する 32 // 値が変わったとき(valueChangedが発生したとき)は sampleSwitch というメソッドを呼ぶ 33 switchView.addTarget(self, action: #selector(sampleSwitch), for: .valueChanged) 34 cell.accessoryView = switchView 35 } else { 36 // MARK: indexPath.row が 0 以外の時はボタンを表示 37 // 基本的なやり方は Switch の時と同じ 38 let buttonView = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 35)) 39 // 必要に応じて各種設定を行う 40 buttonView.setTitle("押してみる", for: .normal) 41 buttonView.setTitleColor(.systemBlue, for: .normal) 42 buttonView.setTitleColor(.systemGray, for: .highlighted) 43 buttonView.tag = indexPath.row 44 // ボタンを押された時(正確には、ボタン内部で押されている状態から離された時)の動作を設定 45 // ボタンから離されたとき(touchUpInseide)は sampleButton というメソッドを呼ぶ 46 buttonView.addTarget(self, action: #selector(sampleButton), for: .touchUpInside) 47 cell.accessoryView = buttonView 48 } 49 50 return cell 51 } 52 53 // MARK: ボタンが押されたときに呼ばれるメソッド 54 // 具体的な処理は必要に合わせて変更してください。 55 @objc func sampleButton(sender: UIButton) { 56 let tag = sender.tag 57 print("(tag) 番目を押した") 58 } 59 60 // MARK: UISwitch の状態が変化したときに呼ばれるメソッド 61 @objc func sampleSwitch(sender: UISwitch){ 62 let tag = sender.tag 63 print("(tag) 番目を切り替えた") 64 } 65 66}

投稿2020/06/25 23:09

TsukubaDepot

総合スコア5086

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

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

Udemy.seitaro

2020/06/26 09:08

TsukdaDepod様 本当に御丁寧にありがとうございます。 ご返信遅くなり誠に申し訳ございません。 まさかここまで御丁寧に説明していただけて光栄です。 ただ、iOSのデザイン的には TableView のセルにボタンを配置することは少ないのではないかと思います。 ➡️こちらのサイトで(https://capibara1969.com/634/)セルをタップした時に画面遷移という箇所があったのでそちらを参考にして見たのですがまだindexPathの部分が理解できず実行はできたものの全てcellに付いているobjectが消えてしまいました。switchは残して他は画面遷移ができるようにしたいのですがそこのやり方を解説していただけますでしょうか。 様々な事を丁寧に教えていただいたのにさらに聞くのは大変おこがましいかもしれませんが教えていただけるようでしたら幸いです。 お手数をおかけして申し訳ございませんがよろしくお願い致します
TsukubaDepot

2020/06/26 12:20

> switchは残して他は画面遷移ができるようにしたいのですがそこのやり方を解説していただけますでしょうか。 「Switchは残して他は画面遷移」ということですが、どのような状態を指しているのでしょうか。 「画面遷移をする」ということは、言い換えれば今表示している内容をそっくりそのまま入れ替えるということになります。 tableViewの表示にしても、Segueなどを使った画面遷移にしても、これらはごく基本的な操作となります。 もし、それぞれの理解が不十分と感じているのであれば、まずはtableViewを使ってテーブルを作ってみたり、Segueを使って画面遷移をしたりと、基本的なパーツだけである程度納得できるようになってから、それらを組み合わせてみても悪くはないかと思いますがいかがでしょうか(過去にそれらを扱った教材などを使ったことがあれば復習するのも一つです)。 やりたいことはたくさんあるかと思いますが、中途半端なままだと結局は不必要な時間ばかりかけてしまっていつまで経っても目的を達成できないことの方が実際は多いです。 どちらにしても、上記のコメントでいただいた内容だけではご質問の意図がつかめませんので、もしその内容を知りたいのであれば、新たに質問を立ち上げていただき、そこでやってみたこと、やろうとしていること、また具体的に何が達成できていないのか書いていただいた方がこちらもコメントしやすいです。
Udemy.seitaro

2020/06/30 12:04

TsukudaDepod様 ご返信遅くなり大変申し訳ございません。 通知に気が付きませんでした。 沢山のアドバイスをありがとうございます。 是非目標を明確にして勉強を行ってみようと思います。
guest

0

このての設定画面はUITableViewController + StaticCells or Eureka あたりが常道では?

投稿2020/06/26 07:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

TsukubaDepot

2020/06/26 08:43 編集

UITableViewController + Static Cells という方法があったんですね。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問