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

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

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

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

Q&A

解決済

1回答

1105閲覧

テーブルビュー2段プロジェクト⇒11 ボタンを押すごとに4種類のtext表示をさせるコード

Tomzy

総合スコア104

Swift

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

0グッド

0クリップ

投稿2017/05/09 02:47

###やりたいこと

テーブルビューにおいて、下記スクリーンショットの右端のチェック印ボタンを押す度に
空白
理解した
もう一度
あとで

空白
理解した
もう一度
あとで

と何回でも順番に表示したい。

イメージ説明

###問題点
下記のコードで表示はできましたが問題があります。

3回押すと「あとで」になりますが4回目を押すと反応しません。(その部分のコードがわからないので書いていません。)

// CustomCell.swift // import UIKit class CustomCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() } @IBOutlet weak var image1: UIImageView! @IBOutlet weak var label1: UILabel! @IBOutlet weak var label2: UILabel! @IBOutlet weak var LabelA: UILabel! @IBOutlet weak var Button: UIButton! var tapCount:UInt32 = 0 var LavelA:String? = nil @IBAction func ButtonAction(_ sender: Any) { if tapCount == 0{ LabelA.text = "理解した" } else if tapCount == 1 { LabelA.text = "もう一度" } else if tapCount == 2 { LabelA.text = "あとで" } print("ここまで来た01") // タップ回数を加算 self.tapCount += 1 } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }

###上記コードに関する注釈
111
image1、lavel1、lavel2 の表示については別のファイルでコードを書いています。

222
LabelAとButtonについてはCustomCell.xibで設定しています。Button表示についてはcheckImage.pinを使っています。

333
最初は下記のコードのごとく空白をコードに書き込んだのですが、そうすると最初にボタンを2度タップしないと「理解した」が表示されない不具合がでましたので上記どおり修正しました。

if tapCount == 0{ LabelA.text = "" }else if tapCount == 1{ LabelA.text = "理解した" } else if tapCount == 2 { LabelA.text = "もう一度" } else if tapCount == 3 { LabelA.text = "あとで" }

444
開発環境
macOS Sierra Ver.10.12.4
Xcode Version 8.3.2 (8E2002)
Swift3

555
image1、lavel1、lavel2に関するCustomCell.swift及びCustomCell.xibについてはteratailの「テーブルビュー2段プロジェクト⇒1〜10」により教えて頂いたコードです。LabelAとButtonについては本やGoogleの情報をもとに考えたものです。

666
お陰様で「スマホの勉強 巻3 トミ爺が語る使い方for iPhone」については1月に無償版、有償版ともにiTunes Connectより許可を貰いリリースしました。全く同じコードでコンテンツを変えてリリース済みの巻1入門編を申請しましたところ無償版は許可になりましたが有償版は単純過ぎるのでiBooksで出すようにと言われました。交渉してもらちがあきませんので、上記のボタンを設置して再申請をすることを意図しています。
巻1Ver.2.0.1

###教えて頂きたいこと
随分と調べたのですがわかりませんので上記問題点を解決するコードを教えて頂けたら幸いです。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初に空白(LabelA.text = "")を設定しておき、こうしたらいかがでしょうか?
ご質問と回答がずれていたら申し訳ございません。

if tapCount == 0{ LabelA.text = "理解した" } else if tapCount == 1 { LabelA.text = "もう一度" } else if tapCount == 2 { LabelA.text = "あとで" } else if tapCount == 3 { LabelA.text = "" } print("ここまで来た01") // タップ回数を加算 if self.tapCount < 3 { self.tapCount += 1 } else { self.tapCount = 0 } }

投稿2017/05/09 03:05

編集2017/05/09 05:47
yuabe

総合スコア143

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

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

fuzzball

2017/05/09 05:50

if tapCount == 3 の中でクリアした方がシンプルかと思います。 もしくは tapCount = (tapCount + 1) % 4 にするか。
Tomzy

2017/05/09 06:07

fuzzballさんへ ありがとうございました。 ばっちりです。これで位置などを整えて申請したいと思います。 また、改善案もじっくり考えてトライしてみます。
fuzzball

2017/05/10 07:12 編集

@Tomzyさん 回答はyuabeさんですよ。
yuabe

2017/05/09 18:48

fuzzball様 なるほど。 勉強になりました。 ありがとうございます。
Tomzy

2017/05/10 06:57

fuzzballさんへ 失礼しました。 まずは「if tapCount == 3 の中でクリアした方がシンプルかと思います。」について、いろいろやってみました。とても勉強になります。 しかし、まだこのシンプルな方法を見いだしていません。 下記にしたら1回目は上手くいくのですが、2度目からは「もう一度」から始まります。それは一旦0 にしてから1を足しますから当然なのはわかるのですがいきづまりました。イニシアライザについて読んだのですが、手にあまります。具体的にはどうしたらよいでしょうか。教えてください。 tapCount = (tapCount + 1) % 4 にする 方法は別途報告します。 import UIKit class CustomCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } @IBOutlet weak var image1: UIImageView! @IBOutlet weak var label1: UILabel! @IBOutlet weak var label2: UILabel! @IBOutlet weak var LabelA: UILabel! @IBOutlet weak var Button: UIButton! var tapCount:UInt32 = 0 var LavelA:String? = nil @IBAction func ButtonAction(_ sender: Any) { if tapCount == 0{ LabelA.text = "理解した" } else if tapCount == 1 { LabelA.text = "もう一度" } else if tapCount == 2 { LabelA.text = "あとで" } else if tapCount == 3 { LabelA.text = "" self.tapCount = 0  //ここに追記 //self.tapCount += 1 } // // // タップ回数を加算 // if self.tapCount < 3 { // self.tapCount += 1 // } // else { // self.tapCount = 0 // } // タップ回数を加算 self.tapCount += 1  //ここに追記 } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }
fuzzball

2017/05/10 07:13 編集

あー、そうですね。後で+1しているから -1 でクリア(というか初期化)しないといけません。 美しくないですねw この方法でやるなら、 ・ButtonAction()の最初に+1する。 ・タップ回数の判定は1〜4で行う。(「1」で1回目の判定になるので分かりやすい) ・4回目の処理の中では0で初期化する。 とするのが良いと思います。 %を使うやり方は問題ないはず‥。
Tomzy

2017/05/10 07:19

fuzzballさんへ 「tapCount = (tapCount + 1) % 4」をやってみました。その報告です。 これは3まできたあと1を足したCountを4で割った残り、すなわち3のあとは0、1、2、3と続くと理解し下記のようにコーディングしました。上手く意図したようになりました。ありがとうございました。こういうのがコーディングの醍醐味なんですね。徐々にわかってきました。 import UIKit class CustomCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } @IBOutlet weak var image1: UIImageView! @IBOutlet weak var label1: UILabel! @IBOutlet weak var label2: UILabel! @IBOutlet weak var LabelA: UILabel! @IBOutlet weak var Button: UIButton! var tapCount:UInt32 = 0 var LavelA:String? = nil @IBAction func ButtonAction(_ sender: Any) { if tapCount == 0{ LabelA.text = "理解した" } else if tapCount == 1 { LabelA.text = "もう一度" } else if tapCount == 2 { LabelA.text = "あとで" } else if tapCount == 3 { LabelA.text = "" // self.tapCount = 0 //self.tapCount += 1 } // // // タップ回数を加算 // if self.tapCount < 3 { // self.tapCount += 1 // } // else { // self.tapCount = 0 // } print("ここまで来た01") // タップ回数を加算 // self.tapCount += 1 tapCount = (tapCount + 1) % 4 //fuzzballさんに教わり追記 } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }
fuzzball

2017/05/10 07:23

>>すなわち3のあとは0、1、2、3と続くと理解し その通りです。うまく動いたようで良かったです。
Tomzy

2017/05/10 07:25

fuzzballさんへ 下記の方法もやってみます。また報告します。こうやってコーディングを覚えていくのだなーって実感しています。 %を使うやり方は、上記に報告しましたとおり上手くいきました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ・ButtonAction()の最初に+1する。 ・タップ回数の判定は1〜4で行う。(「1」で1回目の判定になるので分かりやすい) ・4回目の処理の中では0で初期化する。 とするのが良いと思います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Tomzy

2017/05/10 07:44

fuzzballさんへ 下記のコードで上手くいきました。報告です。 「・ButtonAction()の最初に+1する。」方法ですが、 var tapCount:UInt32 = 0 を var tapCount:UInt32 = 1 にしてみました。ButtonAction()のところを書き換える方法があったら教えてください。 import UIKit class CustomCell: UITableViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } @IBOutlet weak var image1: UIImageView! @IBOutlet weak var label1: UILabel! @IBOutlet weak var label2: UILabel! @IBOutlet weak var LabelA: UILabel! @IBOutlet weak var Button: UIButton! var tapCount:UInt32 = 1  //原案は0でしたが1にしました。 var LavelA:String? = nil @IBAction func ButtonAction(_ sender: Any) { //tapCount += 1 if tapCount == 1{  //0から始まるのを1スタートにしました。 LabelA.text = "理解した" } else if tapCount == 2 { LabelA.text = "もう一度" } else if tapCount == 3 { LabelA.text = "あとで" } else if tapCount == 4 { LabelA.text = "" self.tapCount = 0 //ここでゼロに戻す //self.tapCount += 1    } // // // タップ回数を加算 // if self.tapCount < 3 { // self.tapCount += 1 // } // else { // self.tapCount = 0 // } print("ここまで来た01") // タップ回数を加算 self.tapCount += 1   //ここを元に戻しました //tapCount = (tapCount + 1) % 4 } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }
fuzzball

2017/05/10 08:02

>>ButtonAction()のところを書き換える方法があったら教えてください。 意味がよく分からないのですが、最初のところに書いてある、 //tapCount += 1 これでOKですよ。(コメントは外して) 人の回答欄ですし、この辺で終わりにさせていただきますね。
Tomzy

2017/05/10 08:17

ありがとうございました。
Tomzy

2017/05/10 09:53

yuabeさんへ ありがとうございました。 お陰様でまもなく申請最終版ができます。 また、この機会にコーディングにより触れることができ理解も深まりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問