むしゃくしゃしてやった、後悔はしていない.
作り方
次のようなビューコントローラを作る.
AsciiAlertController.swift
import UIKit
class AsciiAlertController: UIAlertController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
for label in findLabels(in: view) {
label.textAlignment = .left
label.font = UIFont.monospacedDigitSystemFont(ofSize: label.font.pointSize, weight: .regular)
}
}
func findLabels(in view: UIView) -> [UILabel] {
return view.subviews.flatMap({ subview -> [UILabel] in
if let label = subview as? UILabel {
return [label] + findLabels(in: label)
} else {
return findLabels(in: subview)
}
})
}
}
次のように呼び出す
ViewController.swift
func showAlert() {
let message = """
∧_∧ ババババ
( ・ω・)=つ≡つ
(っ ≡つ=つ
`/ )
(ノΠU
何回閉じても無駄ですよ?ww
m9(^Д^)プギャー!!
"""
let dialog = AsciiAlertController(title: nil, message: message, preferredStyle: .alert)
dialog.addAction(UIAlertAction(title: "閉じる", style: .default, handler: { _ in
self.showAlert()
}))
show(dialog, sender: nil)
}
工夫したところ
- AAを表示するために,UIAlertViewControllerのUILabelを全部左寄せにした
- また,等幅フォントにした(これはやらなくても変わらなかったかも)
環境
- Xcode: 10.1
- macOS 10.14 (Mojave)