ottijp blog

何回閉じても無駄ですよ in Swift

むしゃくしゃしてやった、後悔はしていない.

作り方

次のようなビューコントローラを作る.

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)

ottijp
都内でアプリケーションエンジニアをしています
© 2026, ottijp