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

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

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

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

button

HTMLで用いる<button>タグです。

Swift

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

Q&A

2回答

1010閲覧

tableviewのセルを選択時に、UIButtonの背景をクリアにしないようにするにはどうしたらいいでしょうか。

Kuma44

総合スコア9

TableView

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

button

HTMLで用いる<button>タグです。

Swift

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

0グッド

0クリップ

投稿2018/09/24 06:10

編集2018/09/28 10:50

実現したいこと

このページのように、表示しているUIButtonの背景色を表示したままにするにはどうしたらいいでしょうか

発生している問題

カスタムセルを作成し、ボタンをラベル代わりにして文字色を白、背景色を赤色などにしたアイコンのような状態にして表示しています。

通常はきちんと背景色が表示されていますが、セルを長押ししている間(ハイライト時?)に背景色がクリア(セル選択時に表示される灰色と同色)になってしまいました。

セル選択した画面遷移後に再びtableviewへ戻ってきた際は、セル選択された時点でセルの色を解除していますので、きちんと背景色は表示されています。

説明が下手で申し訳ございませんが、どなたかご教示願います。

試したこと

このページの以下コードをカスタムセルのファイルへ入れましたが、選択している間は変わりませんが、選択後、次ページへ進む際には背景がクリアになってしまいました。
また、UIButtonの背景の色はセルの内容によって違いますので、カスタムセルでの設定時には行いたくないです。

swift

1override func setHighlighted(highlighted: Bool, animated: Bool) { 2 super.setHighlighted(highlighted, animated: animated) 3 self.subView.backgroundColor = UIColor.lightGrayColor() 4}

補足情報

セル選択中(長押し中)
![イメージ説明]
画面遷移中
イメージ説明

セル選択中はボタンとラベルのそれぞれの背景色は表示されるようになりましたが、画面遷移中はボタンとラベルの背景色が消えてしまいます。
この遷移中に表示されるセルの背景色はクリアすることができるのでしょうか。

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

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

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

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

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

fuzzball

2018/09/26 06:45 編集

(deleted)
fuzzball

2018/09/28 01:03

ボタンはボタンとして使用しておらず、あくまでラベル代わりということでしょうか?ラベルを使用していない理由は何でしょうか?
fuzzball

2018/09/28 01:35

もう一つ、セルはハイライトさせないといけないのでしょうか?
Kuma44

2018/09/28 10:53

ボタンはボタンとしてではなく、ラベル代わりで使ってましたが、確認したところラベルでも問題なかったので変更するつもりです。セルのハイライトはタップ時だけはさせたいです。
guest

回答2

0

色々と質問などしていますが、先に回答を書いておきます。
前提とする仕様は下記の通りです。

  • セルの背景色は、ハイライト時(押している間)のみ変更する。
  • セルに乗っているUIの背景色は影響を受けない。

swift

1class CustomCell: UITableViewCell { 2 3 override func setHighlighted(_ highlighted: Bool, animated: Bool) { 4 if highlighted { 5 //押している間のセルの背景色 6 self.contentView.backgroundColor = .lightGray 7 } else { 8 //通常時のセルの背景色 9 self.contentView.backgroundColor = .orange 10 } 11 } 12 13 override func setSelected(_ selected: Bool, animated: Bool) { 14 //空っぽにしておく 15 } 16 17}

※TableView側の.deselectRow(at:animated:)は、あっても無くてもかまいません。

投稿2018/09/26 06:44

編集2018/09/28 02:15
fuzzball

総合スコア16731

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

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

Kuma44

2018/09/27 14:23

ご回答いただきましてありがとうございます。 説明が下手で申し訳ないのですが、前提としてセル選択をすると画面遷移し、詳細画面が表示される設定になってます。 ご提示いただいたコードは設定しており、詳細画面からtableViewに戻ってきた際はセル選択が解除されているので、backgroundColorは表示されています。 setHighlighted(highlighted:animated:)は選択中(長押ししている間)はbackgroundColorは表示されたままですが、画面遷移中(タップしてから詳細画面が表示されるまでの間)はbackgroundColorが消えてしまうので、残ったままにできないかと思ったところです。 また、setHighlighted(highlighted:animated:)ですと、backgroundColorをセルによって色を指定できないところも懸念点です。
fuzzball

2018/09/27 23:54

質問文中の「背景色」というのはボタンの背景色なんですね。セルの背景色だと勘違いしていました。少し試してみます。
fuzzball

2018/09/28 01:41

>>画面遷移中(タップしてから詳細画面が表示されるまでの間)はbackgroundColorが消えてしまうので deselectRow(at:animated:)を呼んでいれば、選択直後にハイライトは解除されるので、遷移中はbackgroundColorは表示されていると思うのですが?(tableView(_:didSelectRowAt:)の中で遷移しているんですよね?) >>setHighlighted(highlighted:animated:)ですと、backgroundColorをセルによって色を指定できない なぜ出来ないのでしょうか?
fuzzball

2018/09/28 02:16

とりあえず回答を書いておきました。
Kuma44

2018/09/28 10:59

補足情報追記させて頂きました。 setHighlighted(highlighted:animated:)は勘違いしてました、セルのハイライト色は統一で大丈夫です。 deselectRow(at:animated:)でハイライトが解除されるのはシミュレーター上では画面遷移後な感じです。
fuzzball

2018/09/30 23:55

私の修正後の回答は反映されているのでしょうか?
guest

0

何が透明になるのか興味があったので調べてみたところ、cell選択時に透明になるのはUIView系のbackgroundColorのみ?で境界線色などは透明にならないようですね
で、方向性が違うので回答しても意味ないかもしれないですが、UIButtonbackgroundImageを設定すると簡単にできそうです。
「UIButtonの背景の色はセルの内容によって違います」とのことなんで条件分けして背景画像を設定することが可能かとも思います。運用上問題なければいかがでしょうか?

イメージ説明

UILablは積層されなくて、ペラ一枚なのね、

投稿2018/09/26 10:52

編集2018/09/26 16:42
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Kuma44

2018/09/27 14:11

ご回答いただきましてありがとうございます。 UILabelでも試してみましたが、おっしゃる通りbackgroundColorのみ変わってしまうようです。 背景画像も考えましたが、色が変更する可能性もあるので、できればbackgroundColorで使用したいという気持ちです。 ラベルやボタンの枠の設定はしていなかったので、最悪それで我慢しようかと思います。
退会済みユーザー

退会済みユーザー

2018/09/28 11:08

fuzzballさんの回答でも、画面遷移中だけ(長押し中は大丈夫で、)UIButton、UILabelの背景色が透明になってしまうということでしょうか? コードでの対応が良いと思いますが、 画像の設定の補足を func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell の中で、例えば、 表示する番号が奇数場合は、青背景画像 偶数の場合は 赤背景画像 といった具合に 条件分けして、背景画像を渡してあげれば、色の変更が可能だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問