Swiftでのアプリ開発で使える、便利な機能拡張をご紹介させて頂きます。
今回はUIViewController編です。
エラー表示
UIAlertControllerを使用して、1行でエラーなどのメッセージを表示させることができます。
コード
extension UIViewController {
func showError(_ title: String, message: String) {
let alert: UIAlertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let close = UIAlertAction(title: "閉じる", style: .default)
alert.addAction(close)
self.present(alert, animated: true, completion: {})
}
}
使い方
self.showError("エラー", message: "読み込みに失敗しました。")
読み込みインジケーターの表示
データの読み込み処理中などに、他の操作ができないよう、読み込み中の画面を表示します。
コード
extension UIViewController {
func showIndicator() {
//黒い半透明の背景
let viewBG = UIView(frame: self.view.frame)
viewBG.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
viewBG.tag = 99999 //タグが他のViewとかぶらないように注意!!
viewBG.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(viewBG)
//背景をViewControllerのViewのサイズに合わせる
viewBG.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
viewBG.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
viewBG.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
viewBG.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
//インジケーター
let indicator = UIActivityIndicatorView()
if #available(iOS 13.0, *) {
//iOS13以上の場合
indicator.style = .large
indicator.color = .white
} else {
//iOS12以下の場合
indicator.style = .whiteLarge
}
indicator.translatesAutoresizingMaskIntoConstraints = false
viewBG.addSubview(indicator)
//インジケーターを画面中央に配置
indicator.centerXAnchor.constraint(equalTo: viewBG.centerXAnchor).isActive = true
indicator.centerYAnchor.constraint(equalTo: viewBG.centerYAnchor).isActive = true
indicator.startAnimating()
}
func removeIndicator() {
//設定したtagを元に読み込み画面を削除
if let view = self.view.viewWithTag(99999) {
view.removeFromSuperview()
}
}
}
使い方
func onStartLoading() {
//読み込みを開始
self.showIndicator()
//読み込みの処理などを記載
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
//読み込み終了
self.removeIndicator()
}
}
その他随時追加予定…