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

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

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

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

Q&A

解決済

2回答

1986閲覧

Swift ラベル表示で、設定はそのままでテキスト内容だけ切り替える方法

torkia

総合スコア24

Swift

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

0グッド

0クリップ

投稿2018/01/30 08:48

編集2018/01/30 08:51

Swift3にて、ボタンを押したらラベルに表示されるテキストが切り替わるように設定しているのですが、最初に表示されてる状態(viewDidLoar内にて条件分岐させて詳細設定をした)の設定で表示させたいのですが、表示切り替えのボタンを押したらその設定は無効となってテキストが表示されてしまいます。

一度初期画面に表示された設定を保持したままで、テキスト内容だけ変更するにはどうすればよいでしょうか?

下記のサンプルコードの状態ですと、
ボタンメソッド内に再度詳細を設定し直す方法しか思いつかないのですが、
他にいい方法はないでしょうか?

宜しくお願い致します。

■ サンプルコード Swift3 xcode8

Swift3

1class FirstViewController: UIViewController, UIScrollViewDelegate { 2 3 var dayArray:[String?] = [] 4   5 var labels = [UILabel]() 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 dayArray = csvArray[12].components(separatedBy: ";") 11 12 (略) 13 14 // ラベルを生成 15 for index in 0..<31 { 16 let label = UILabel() 17 label.font = UIFont.systemFont(ofSize: 12) 18 label.backgroundColor = rgbaPaleGray 19 label.frame = CGRect(x: 40, y: 100 + (index * 30), width: 315, height: 30) 20 label.numberOfLines = 0 21 labels.append(label) 22 scrollView.addSubview(label) 23 } 24 25 // ラベルにテキストをセット 26 labels[0].text = dayArray[4] 27 labels[1].text = dayArray[8] 28 (略) 29 labels[30].text = dayArray[124] 30 31 32 // ■が含まれていれば、 ■を削除してラベルの色を変える 33 for i in labels { 34 if let range = i.text?.range(of: "■") { 35 i.text?.removeSubrange(range) 36 i.backgroundColor = rgbaMediumGray 37 } 38 } 39 40 41    // ラベルを改行させてラベルの高さを変更する 42 var maxY: CGFloat = 100 43 for c in labels { 44 c.frame.origin.y = maxY 45 if c.text?.characters.count > 25 { 46 c.frame.size.height += 20 47 c.frame = CGRect(x: 40, y: maxY, width: 315, height: c.frame.size.height) 48 49        // 行間のスペースを調整 50 let LineSpaceStyle = NSMutableParagraphStyle() 51 LineSpaceStyle.lineSpacing = 5.0 52 let lineSpaceAttr = [NSParagraphStyleAttributeName: LineSpaceStyle] 53 c.attributedText = NSMutableAttributedString(string: c.text!,attributes: lineSpaceAttr) 54 } 55 maxY = c.frame.maxY 56 } 57 58    // Button0生成 59 let button0 = UIButton() 60 button0.frame = labels[0].frame 61 button0.addTarget(self, action: #selector(button0Event(sender:)), for: .touchUpInside) 62 scrollView.addSubview(button0) 636465 (略) 666768 69 } //viewDidLoadを閉じる 70 71 72 73 // ボタン0が押された時に呼ばれるメソッド 74 func button0Event(sender: UIButton) { 75 if labels[0].text == dayArray[4] { 76 labels[0].text = dayArray[6] 77 } else { 78 labels[0].text = dayArray[4] 79 } 80 } 818283 (略) 848586 87}

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

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

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

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

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

fuzzball

2018/01/30 08:57 編集

.textだけ更新したらテキストしか変わらないと思うのですが、何がどう変わってしまうのか具体的に書いて下さい。また、詳細設定というのは何でしょう?色とか高さのことですか?
torkia

2018/01/30 13:16

追記ありがとうございます。 ボタンを一度クリックすると別のテキストが表示され、もう一度押すと最初に表示されてたテキストに戻るようにしているのですが、主に、テキストに対して設定している行間スペースとか記号の削除などです。ラベルを生成時には設定していない項目です。
guest

回答2

0

ベストアンサー

詳細設定の処理を関数化して、テキストを更新したときに呼びましょう。

投稿2018/01/31 00:45

fuzzball

総合スコア16731

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

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

torkia

2018/02/02 06:12

回答ありがとうございました。 無事解決できました。
guest

0

おそらく、UILabelがちゃんと個々でパースされてないのかと。
同じオブジェクトをaddSubviewさせてしまってるのかと思うので、
クラス内プロパティの方から取ってきてaddSubviewしてみてはいかがかと

swift

1// ラベルを生成 2 for index in 0..<31 { 3 let label = UILabel() 4 label.font = UIFont.systemFont(ofSize: 12) 5 label.backgroundColor = rgbaPaleGray 6 label.frame = CGRect(x: 40, y: 100 + (index * 30), width: 315, height: 30) 7 label.numberOfLines = 0 8 labels.append(label) 9 scrollView.addSubview(label) 10 } 11 12// 下記に修正 13 14 for index in 0..<31 { 15 let label = UILabel() 16 label.font = UIFont.systemFont(ofSize: 12) 17 label.backgroundColor = rgbaPaleGray 18 label.frame = CGRect(x: 40, y: 100 + (index * 30), width: 315, height: 30) 19 label.numberOfLines = 0 20 // 一応self入れとく 21 self.labels.append(label) 22 // ViewControllerクラスで指定したプロパティから、addSubviewさせる 23 scrollView.addSubview(self.labels[index]) 24 } 25 26

投稿2018/01/30 09:05

miyabi_takatsuk

総合スコア9528

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

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

fuzzball

2018/01/30 09:15

ループの中で生成しているので同じじゃないと思いますよ。
miyabi_takatsuk

2018/01/31 00:43

そうなのですね・・・。すみませんでした。 改めます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問