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

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

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

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

Q&A

解決済

2回答

2027閲覧

IBActionでボタンを押した後、UITableview上のdetailTextLabelを一括で非表示にしたい(隠したい)のですがやり方がわかりません。

shanqi

総合スコア12

Swift

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

0グッド

1クリップ

投稿2015/07/30 01:59

@IBAction func test(sender: AnyObject) {

if(cell.detailTextLabel!.hidden == false) { cell.detailTextLabel!.hidden = true; } else { cell.detailTextLabel!.hidden = false; } }

こうすると Use of unresolved identifier "cell"というエラーがでます。
ちなみにセル上のidentifierはcellにしております。
何卒ご教授いただけると幸いです。よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

手っ取り早いのはセルを使ってるViewControllerクラス側でdetailTextLabelの表示フラグを持っておくことですかね、cellForRowAtIndexPath関数内で表示フラグを見てdetailTextLabelを表示するかどうかの処理を書いておいて、表示フラグが切り替わったタイミングでreloadDataを呼び出すとうまくいくのではないでしょうか

Swift

1 var tableView: UITableView! 2 3 var isShowDetailTextLabel = false // falseとしてますが初期値としたいBool値で 4 5 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 6 let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier", forIndexPath: indexPath) as! UITableViewCell 7 8 cell.detailTextLabel?.hidden = !self.isShowDetailTextLabel 9 10 return cell 11 } 12 13 @IBAction func test(sender: AnyObject) { 14 self.isShowDetailTextLabel = !self.isShowDetailTextLabel 15 self.tableView.reloadData() 16 }

投稿2015/07/30 06:33

編集2015/07/30 06:58
__moai

総合スコア264

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

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

shanqi

2015/07/30 09:25

ありがとうございます! 言葉足らずでごめんなさい???? 自分としては ①デフォルトでdetailtextlabel全表示 ②testボタンを一度押しでdetailtextlabel全非表示 ③もう一度testボタンを押すとdetailtextlabel全表示に戻る といった感じの作りにしたいと考えてます。 ①〜③を実現しうるコードとは一体どのようにしたら良いのでしょうか? ご回答お待ちしております!
__moai

2015/07/30 13:28

私が提案してるのは①〜③を満たす実装ですよ ピンとこない部分があれば聞いて頂ければお答えします
shanqi

2015/07/30 14:33

できました!!ありがとうございます????
guest

0

cellという変数が解決できないっていうエラーですね。
ちなみにおっしゃっているidentifierはセルにつけるラベルみたいなものです。

なぜラベルをつけるかというと。
UITableViewは基本的に必要なセル数(表示領域内を埋められるのに十分な数)しか生成しません。
スクロールするとたくさんセルがあるように見えますが、画面外に消えたセルを使いまわして余分なセルを作らないように節約しているんです。

そしてラベルと書いたのは、この「再利用される」セルを識別するためです。
同じラベルがついた未使用のセルがある場合はそれを使い、ない場合は新規作成、となります。

と、ここまでがセルの使われ方の話です。
おそらく上記のラベルを指定して処理を書こうとしているのだと思いますが、説明した通りあくまでラベルとしての意味しかないので、「セルのインスタンス」を取得してそれに対して処理を書かないとなりません。

具体的に言うと、今「表示されている」セルはtableView.visibleCells()で取得できます。
配列が返されるので、これをfor文などでループさせてそのセルに対して処理をしてやれば解決できると思います。

まずはUITableViewのセルがどう扱われるか、というのをしっかりと理解することをおすすめします。

投稿2015/07/30 02:09

edo_m18

総合スコア2283

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

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

shanqi

2015/07/30 03:12 編集

ありがとうございます!超初心者の僕には少々難しいですが、少しずつ理解していこうと思います。 ちなみに、tableView.visibleCells()を@IBActionの中に打ち込んでみたのですが、 cannot invoke "visibleCells" with no argumentsと出てきてしまいます。 まだ他の要素を加える必要があるのでしょうか? それともtableView.visibleCells()を組み込む場所が違うのでしょうか? ご回答よろしくお願いします。 ______________________________ @IBAction func test(sender: AnyObject) { for cell in tableView.visibleCells() as! [UITableViewCell] { if(cell.detailTextLabel!.hidden == false) { cell.detailTextLabel!.hidden = true; } else { cell.detailTextLabel!.hidden = false; } }
edo_m18

2015/07/30 03:43

`tableView`は定義されていますか? `tableView`は操作したい対象のテーブルを指定してください。 (`tableView`は決まった名前というわけではないので、状況によっては別の変数名という可能性もあるので)
shanqi

2015/07/30 04:07

できました!!ご丁寧にありがとうございました!
shanqi

2015/07/30 04:10

ただこれは「表示されている」セルなんですね。 スクロールして下がったら非表示になっていませんでした???? 全部を隠すにはどうすれば良いのでしょうか??
edo_m18

2015/07/30 04:16

そうですね。visible cellsなので。 ただ、設定をした瞬間は見えているセルだけ設定すればユーザーの目にはすべて設定されたように見えます。 あとはむずかしく考えず、これから表示されるセルについては生成時に処理してあげればOKです。 具体的には、cellForRowAtIndexpathメソッドでセルを整形しているかと思いますが、そのときに該当セルの項目の「隠すフラグ」がついていたらそもそもセルの見栄えとして該当箇所を非表示にしてやれば、結果としてすべてのセルが設定されているように見えるはずです。 文章だけだと難しいですが、 1. まず見えているセルだけを処理する 2. 見えていないセルについては、セルが表示されるときにどういう状態かを予め設定して表示させる とふたつに処理を分けて考えると分かりやすいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問