경고 대화 상자 기본 모드

개요


일반 클래스를 만들고 화면에서 UIAlertController 대화 상자의 표시를 호출합니다.
일반 단추 1개 또는 2개의 대화상자를 가정하십시오.
세 개 이상의 단추 설정이나 텍스트 필드가 있는 대화상자의 사용 빈도가 비교적 낮아 일반 클래스의 요구에 포함되지 않습니다.

설명 기본 대화 상자


AlertDialog

let alert = UIAlertController(title:<#title#>, message:<#message#>, preferredStyle:UIAlertController.Style.alert)
		
alert.addAction(UIAlertAction(title: <#buttonTItle#> , style:UIAlertAction.Style.default){
	(action:UIAlertAction)in
	//ボタンが押された時の処理
	
})
		
alert.addAction(UIAlertAction(title: <#cancelButtonTitle#>, style:UIAlertAction.Style.cancel){
	(action:UIAlertAction)in
	//キャンセルボタンが押されたときの処理
	
})

present(alert, animated: true, completion:nil)

<# #>의 부분은 Xcode에서 자리 표시자로 처리됩니다.

유니버설 클래스화


적절한 swift 파일 만들기 (여기는 Common.swift) 는 다음과 같습니다.
struct~의 구성은 개인의 취향에 따라 달라집니다.
ButonTitle을 nil로 설정하면 버튼이 표시되지 않습니다.또한isDestructive:true 버튼이 빨간색으로 표시됩니다(삭제 등에 사용됨).
commpletion에서 선택한 단추를 되돌려줍니다. (cancel은 가짜입니다.)nil을 설정할 수도 있습니다.
지정preferredAction 버튼이 굵어집니다.상황에 따라 따로 사용하세요.topViewController()에서 가장 앞의 ViewController를 가져와 대화 상자를 표시합니다.
Common.swift
import UIKit

struct Common {
	struct Utility {

		/// アラートダイアログ
		/// - Parameters:
		///   - title: タイトル
		///   - message: メッセージ
		///   - okButtonTitle: 右側のボタンタイトル。nilでボタン非表示
		///   - isDestructive: 右側のボタンスタイル、trueで赤文字になる(削除などのアクション向け)
		///   - cancelButtonTitle: 左側キャンセルボタンのタイトル。nilでボタン非表示
		///   - completion: キャンセルボタンタップでfalseを返す。OKボタンタップでtrueを返す。(省略可)
		static func showAlert(title: String?, message: String?, okButtonTitle: String?, isDestructive: Bool, cancelButtonTitle: String?, completion: ((Bool) -> Void)?) {
			let buttonStyle: UIAlertAction.Style!
			if isDestructive == true {
				buttonStyle = .destructive
			} else {
				buttonStyle = .default
			}

			let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)

			if let okButtonTitle = okButtonTitle {
				let OKAction = UIAlertAction(title: okButtonTitle, style: buttonStyle) { (_: UIAlertAction) in
					if let completion = completion {
						completion(true)
					}
				}
				alert.addAction(OKAction)
				alert.preferredAction = OKAction
			}

			if let cancelButtonTitle = cancelButtonTitle {
				let cancelAction = UIAlertAction(title: cancelButtonTitle, style: UIAlertAction.Style.cancel) { (_: UIAlertAction) in
					if let completion = completion {
						completion(false)
					}
				}
				alert.addAction(cancelAction)
			}

			let topview = topViewController()
			if let topview = topview {
				topview.present(alert, animated: true, completion: nil)
			}
		}
			
		/// 最上位のViewControllerを取得
		/// - Returns: UIViewController
		static func topViewController() -> UIViewController? {
			var topViewController: UIViewController?
			if #available(iOS 13.0, *) {
				let scenes = UIApplication.shared.connectedScenes
				let windowScene = scenes.first as? UIWindowScene
				let window = windowScene?.windows.first
				topViewController = window?.rootViewController
			} else {
				topViewController = UIApplication.shared.keyWindow?.rootViewController
			}

			while (topViewController?.presentedViewController) != nil {
				topViewController = topViewController?.presentedViewController
			}

			return topViewController
		}
	}
}

사용법


viewController.swift

// ボタンひとつのシンプルなダイアログ
Common.Utility.showAlert(title: "タイトル", message: "メッセージ本文", okButtonTitle:"OK", isDestructive: false, cancelButtonTitle: nil, completion: nil)


// ボタンふたつのパターン
Common.Utility.showAlert(title: "タイトル", message: "メッセージ本文", okButtonTitle: "OK", isDestructive: true, cancelButtonTitle: "Cancel") { status in
	
	if status == true {
		// OKボタン選択時の処理
		
	} else {
		// Cancelボタン選択時の処理
		
	}
}

좋은 웹페이지 즐겨찾기