練習でクイズアプリを作成しています。
Rikuto Satoさんという方の動画を参考に作っています。
【総集編】【Swift/Xcode入門】クイズアプリ開発講座~ 1時間半でクイズアプリを開発しよう ~
動画内のPart3の内容を自分も実際に作ったのですが赤枠(他2つも同様)の所が中途半端な所で改行が入ってしまいとても気になっています。やりたい事は青枠のように改行?させる事です。
csvファイルを書くときにその中で改行のコマンド(?)を書いたりするのかと思い調べてはみたのですがそれらしい方法を見つけることができませんでした。
[実際の問題画面]
[csvファイルの画面]
[問題出力のコード(動画内のものを丸々使用)]
Swift
import UIKit class highViewController: UIViewController { //問題番号と問題 @IBOutlet weak var quizNumberLabel: UILabel! @IBOutlet weak var quizTextView: UITextView! //ボタン番号 @IBOutlet weak var answerButton1: UIButton! @IBOutlet weak var answerButton2: UIButton! @IBOutlet weak var answerButton3: UIButton! @IBOutlet weak var answerButton4: UIButton! var csvArray: [String] = [] var quizArray: [String] = [] var quizCount = 0 override func viewDidLoad() { super.viewDidLoad() csvArray = loadCSV(fileName: "highquiz") print(csvArray) quizArray = csvArray[quizCount].components(separatedBy: ",") //第一問 問題とボタン各種 quizNumberLabel.text = "第\(quizCount + 1)問" quizTextView.text = quizArray[0] answerButton1.setTitle(quizArray[2], for: .normal) answerButton2.setTitle(quizArray[3], for: .normal) answerButton3.setTitle(quizArray[4], for: .normal) answerButton4.setTitle(quizArray[5], for: .normal) // Do any additional setup after loading the view. } @IBAction func btnAction(sender: UIButton){ if sender.tag == Int(quizArray[1]){ print("正解") } else { print("不正解") } nextQuiz() } func nextQuiz(){ quizCount += 1 if quizCount < csvArray.count { quizArray = csvArray[quizCount].components(separatedBy: ",") //第一問 問題とボタン各種 quizNumberLabel.text = "第\(quizCount + 1)問" quizTextView.text = quizArray[0] answerButton1.setTitle(quizArray[2], for: .normal) answerButton2.setTitle(quizArray[3], for: .normal) answerButton3.setTitle(quizArray[4], for: .normal) answerButton4.setTitle(quizArray[5], for: .normal) } else { performSegue(withIdentifier: "toScoreVC", sender: nil) } } func loadCSV(fileName: String) -> [String]{ let csvBundle = Bundle.main.path(forResource: fileName, ofType: "csv")! do{ let csvDate = try String(contentsOfFile: csvBundle, encoding: String.Encoding.utf8) let lineChange = csvDate.replacingOccurrences(of: "\r", with: "\n") csvArray = lineChange.components(separatedBy: "\n") csvArray.removeLast() } catch { print("エラー") } return csvArray // Do any additional setup after loading the view. } }
改行したいところに改行コード (\n) を入れれば良いのですが、問題は csv を読み込むときに改行で区切ってるので…。
\nを入れることもやってはみてたんですがそのまま\nが表示されるだけでした、、、
printでコンソールに表示させても\nが表示されますか?
\nを追加した状態で実際に動かしてみてみましたが\nが表示されていました。
https://qiita.com/miyohide/items/6cb8967282d4b2db0f61
バックスラッシュを入力するときにoptionキーを押しながら、¥キーを押していますか?
はい。optionキー+¥キーで入力しています。
print("ほげ\nほげ")は改行されて表示されますか?
ついでにsetTitleでも試してもらいたいです。
改行して表示されてなかったと思います。
わかりました。あとすみません。setTitleのがどこにあるのか教えてもらえますか?すみません、、
answerButton1.setTitleのことです。
print("ほげ\nほげ")が改行されないのは謎ですね。
んー、今回は開業などはなしでそのまま行きます。5ugarVVatch1ngさん最後まで丁寧に教えていただきありがとうございます。
あ、えっと、本物の改行と、改行を表すのによく使われる文字の並び (\ と n の 2 文字) の混乱があるようです。
csv の中に本物の改行を入れてしまうと、そこで別の行になってしまうので、代わりに \n と記述して、読み込むときにはそれを本物の改行に置き換えると良いのでは。
(print("ほげ\nほげ") の場合、コンパイル時に \n が本物の改行に置き換わりますが、csv の中に \n と書いても、それは \ と n の 2 文字です。)
まだ回答がついていません
会員登録して回答してみよう