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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

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

解決済

2回答

344閲覧

tableViewについて

退会済みユーザー

退会済みユーザー

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

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クリップ

投稿2017/07/14 14:36

編集2017/07/16 02:12

実現させたいこと
add cellをタップした時にアラートテキストが呼び出されてそこで入力した内容をadd cellの上のtableviewに表示出来るようにしたいです。

swift

1import UIKit 2 3class ViewController: UIViewController,UITabBarDelegate,UITableViewDataSource { 4 5 @IBOutlet weak var mytableView: UITableView! 6 7 var kei = ["cell 追加"] 8 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 // Do any additional setup after loading the view, typically from a nib. 13 } 14 15 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 16 return 1 17 } 18 19 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 20 let cell = UITableViewCell(); 21 cell.textLabel?.text = kei[indexPath.row] 22 return cell 23 } 24 25 func tableView(_ tableView: UITableView, didSelectRowAtIndexPath: IndexPath) -> UITableViewCell { 26 27 let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert) 28 29 // OKボタンの設定 30 let okAction = UIAlertAction(title: "OK", style: .default, handler: { 31 (action:UIAlertAction!) -> Void in 32 33 // OKを押した時入力されていたテキストを表示 34 if let textFields = alert.textFields { 35 36 // アラートに含まれるすべてのテキストフィールドを調べる 37 for textField in textFields { 38 print(textField.text!) 39 } 40 } 41 }) 42 alert.addAction(okAction) 43 44 // キャンセルボタンの設定 45 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 46 alert.addAction(cancelAction) 47 48 // テキストフィールドを追加 49 alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 50 textField.placeholder = "テキスト" 51 }) 52 53 54 alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生 55 56 // アラートを画面に表示 57 self.present(alert, animated: true, completion: nil) 58 return cell 59 } 60 61 62 override func didReceiveMemoryWarning() { 63 super.didReceiveMemoryWarning() 64 // Dispose of any resources that can be recreated. 65 } 66 67 68 69}

自分で出来たこと
イメージ説明

tableView外にボタンを設置してそこからアラートテキストを呼び出して入力した内容をtableViewに反映させることはできるのですがtableView内のテキストをタップしてデータを反映させることがどうしても分からないので教えていただきたいです。

イメージ説明

swift

1func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 2 return kei.count 3 }

swift

1for textField in textFields { 2 self.kei.append(textField.text!) 3 } 4 self.mytableView.reloadData()

以下の部分を訂正したことによってcell追加をタップして入力させることができるようになったのですが理想としてはcell追加の上に入力した内容が反映されるようにしたいです。
イメージとしてはこのようにしたいです。
イメージ説明

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

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

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

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

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

ykws

2017/07/14 23:17 編集

cellをタップした時にアラートテキストが呼び出されてそこで入力、というところまではできていますか? であれば、そこまで実現したコードを載せるのが良いと思います。
退会済みユーザー

退会済みユーザー

2017/07/14 23:49

ご指摘ありがとうございます。早速自分が知っている限りのことをやって見たのですがこの後がもう分からないです。
guest

回答2

0

@haruka_t さん
別の質問で、タップすると didSelectRowAtIndexPath が呼ばれるのはわかったと思います。
この時タップした位置が IndexPath に渡されるので、これを利用して処理を分岐すれば実現できます。

本質問とは、ずれてしまうので、この回答で解決できない場合は、
新規に質問を作成することをおすすめします。

投稿2017/09/21 00:34

ykws

総合スコア1236

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

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

0

ベストアンサー

エラーが発生しているのは、未定義の変数を参照しているからです。
また didSelectRowAtIndex は返り値がないので、 宣言の -> UITableViewCellreturn cell が不要です。

ここまでできているなら、下記で取得した文字列をデータ元である kei に対して更新して、 tableView.reloadData() と TableView を更新すれば反映されると思います。

例えば、セルを単純に上へと追加していくなら、下記のような更新が考えられます。

swift

1for textField in textFields { 2 self.key.insert(textField.text!, at:0) 3} 4 5self.tableView.reloadData()

投稿2017/07/15 00:33

編集2017/07/16 06:25
ykws

総合スコア1236

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

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

退会済みユーザー

退会済みユーザー

2017/07/15 06:28 編集

丁寧に教えて頂いてありがとうございます そのおかげでエラーは取れたのですがどうしてもアラートテキストで入力した内容がtableViewに反映させれないのですが for textField in textFields { print(textField.text!) } tableView.reloadData() ここの部分を書く場所が間違っているのでしょうか?
ykws

2017/07/15 13:22

回答にセルを単純に追加する一例を追記しました。 上記のように配列に対して何も処理していないなら反映されないのは正しい動作になります。
退会済みユーザー

退会済みユーザー

2017/07/16 02:16

教えて頂いたことに加えて以下の部分が直したところ入力したものが反映できるようになりました。 しかし自分としてはcell追加の上に入力した内容を反映させたいのでどのようにすればできるのか教えて頂けないでしょうか? func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return kei.count //修正した部分 }
ykws

2017/07/16 06:34

方法は二つあります。 また考えるポイントも二つあります。 一つずつ見ていきましょう。 考えるポイントの一つ目はデータ構造が配列という順序付きでデータを保持している点です。 二つ目は TableView がセルの位置ごとに表示処理を行なっている点です。 これを前提として、 現状は、 TableView では配列に保存された順番通りに上から下へと表示しています。 なので、保存された順番とは逆順に表示すれば期待通りの表示順になります。 もう一つは変更した例のように、配列に追加するときに新しいものを一番先頭に追加します。 TableView は配列の順番通りに表示するので、追加したものが上に表示されるようになります。 セルのソート表示を行う場合は、データ保持順に依存しない前者の実装が望ましいでしょう。 実現したい内容に合わせてどちらを採用するか考えてみてください。
退会済みユーザー

退会済みユーザー

2017/09/20 16:26

もうすでにベストアンサーがついている質問に質問するのは無礼かもしれませんが私は今このコードを自分なりにアレンジしようと参考にさせて頂いているのですが、私がやりたいこととしては「cell 追加」以外のcellをタップしてもアラートテキストが出ないようにしたいのですが、その場合どのようにすればいいのでしょうか?ネットで私なりに色々調べて見たのですが私がしたいことについて書いている記事がなくどうすればいいのか分からなく困っているのでもしご迷惑でなければ教えていただけないでしょうか?
ykws

2017/09/21 00:34

@haruka_t さん 別の質問で、タップすると didSelectRowAtIndexPath が呼ばれるのはわかったと思います。 この時タップした位置が IndexPath に渡されるので、これを利用して処理を分岐すれば実現できます。 本質問とは、ずれてしまうので、この回答で解決できない場合は、 新規に質問を作成することをおすすめします。
退会済みユーザー

退会済みユーザー

2017/09/21 00:49

教えて頂きありがとうございます。一応少しは分かったのですがどのようにコードを書いたら分からないのでもし宜しければ私の方で新しく質問を立てたのでそちらで具体的に教えて頂けないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問