반응형
UIKit + StoryBoard 사용당시 UIAlertViewController를 사용했었으나 SwiftUI에서는 Alert를 사용해야 한다.
SwiftUI에서 Alert를 사용하는 방법은 다음과 같다.
아래 코드를 보면 @State 변수인 isShow 값이 true일때 Alert가 노출되는 것을 볼 수 있다.
UIAlertViewConroller와 다르게 Alert은 isPresented에 해당되는 값이 반드시 있어야 한다.
struct AlertView: View {
@State private var isShow = true
var title : Text? = nil
var message : Text? = nil
var btn1 : Text? = nil
var body: some View {
VStack {
}
.alert(isPresented: $isShow) {
let btn1 = Alert.Button.default(btn1!) {
}
return Alert(title: title!,
message: message!,
dismissButton: btn1)
}
}
}
하여 .alert만 단독으로 사용은 불가하며, Button, VStack 등과 같이 UI 요소에 연계되어 사용이 가능하다.
아래 코드는 버튼을 클릭하여 alert을 노출하는 코드이다.
struct AlertView: View {
@State private var isShow = false
var title : Text? = nil
var message : Text? = nil
var btn1 : Text? = nil
var body: some View {
Button("Show Alert") {
isShow = true
}
.alert(isPresented: $isShow) {
let btn1 = Alert.Button.default(btn1!) {
}
return Alert(title: title!,
message: message!,
dismissButton: btn1)
}
}
}
UIAlertViewController와 다르게 Alert의 경우 버튼이 없는 상태로 출력을 할 수가 없다.
아래 코드와 같이 button 등록을 하지 않아도 기본 OK 버튼이 노출되게 된다.
.alert(isPresented: $isShow) {
let btn1 = Alert.Button.default(btn1!) {
}
return Alert(title: title!,
message: message!)
}
그외 사용자가 팝업을 닫더라도 동일한 팝업을 노출하고 싶다면.... DispatchQueue.main.asyncAfter를 이용하면 된다.
이는 @State 변수의 상태 값이 false와 true가 동시에 변경될 경우 바로 반영이 되지 않기 때문(@State 변수 고려사항)에 일정 시간 지연을 주어야 화면이 갱신되기 때문이다.
struct AlertView: View {
@State private var isShow = true
var title : Text? = nil
var message : Text? = nil
var btn1 : Text? = nil
var body: some View {
VStack {
}
.alert(isPresented: $isShow) {
let btn1 = Alert.Button.default(btn1!) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
isShow = true
})
}
return Alert(title: title!,
message: message!,
dismissButton: btn1)
}
}
}
반응형
'개발' 카테고리의 다른 글
swift 단말기 설정에서 알림 ON/OFF 시 앱에서 이벤트 받기! (0) | 2022.09.22 |
---|---|
22년 6월 30일 이후 앱 심사 시 Sign in with Apple 적용 대상 앱에 회원탈퇴 시 revoke api 적용 지침 가이드 (0) | 2022.06.28 |
SwiftUI) @AppStorage 프로퍼티를 아세요? UserDefaults를 이용하여 화면 갱신 시키는 방법!!! (0) | 2022.05.10 |
SwiftUI) @State 변수를 id(_)에 적용하여 화면 갱신하기! (0) | 2022.05.10 |
SwiftUI) @State 변수란?, View 라이프사이클? - 사용하다 느낀 정의? (0) | 2022.05.03 |