Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- SWIFT
- Human interface guide
- MVVM
- combine
- Refactoring
- 리펙터링
- tableView
- 애니메이션
- 클린 코드
- collectionview
- swiftUI
- Xcode
- 리펙토링
- clean architecture
- HIG
- swift documentation
- UITextView
- Clean Code
- RxCocoa
- UICollectionView
- 리팩토링
- ribs
- uiscrollview
- ios
- Observable
- uitableview
- 스위프트
- rxswift
- Protocol
- map
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 5. 메시지 전달 (alert, actionSheet) 본문
* 메시지 전달의 종류
- 단순 알림창
- 로컬 알림
- 서버 알림 (여기서는 다루지 않음)
1. 단순 알림창
- 앱이 실행중에만 가능 (fore ground에서만 가능)
1) 생성
- DispatchQueue.main.async : 메인스레드(UI관련)에서도 async작업을 사용할 수 있도록 하는 것
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
DispatchQueue.main.async {
let alert = UIAlertController(title:"알림",
message: "UIAlertController알림창",
preferredStyle: .alert) // .actionSheet사용가능
let ok = UIAlertAction(title: "ok", style: .default)
let cancel = UIAlertAction(title: "cancel", style: .cancel)
let importantOk = UIAlertAction(title: "ok!?", style: .destructive) // 빨간색으로 표시
alert.addAction(ok)
alert.addAction(cancel)
alert.addAction(importantOk)
self.present(alert, animated: true)
}
|
2) 텍스트 필드 생성 및 접근
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
alert.addTextField(configurationHandler: { (tf) in
tf.placeholder = "아이디"
tf.isSecureTextEntry = true
})
alert.addTextField(configurationHandler: { (tf) in
tf.placeholder = "암호"
tf.isSecureTextEntry = true
})
let ok = UIAlertAction(title: "ok", style: .default) { (_) in
guard let id = alert.textFields?[0].text else {return}
guard let pw = alert.textFields?[1].text else {return}
}
|
2. 로컬알림
- UNMutableNotificationContent() 객체, UNUserNotificationCenter인스턴스 이용
- 정한 시간 후 자동 알림 기능
- fore ground에서는 실행이 안되고 오직 back ground에서만 실행가능(홈버튼을 누른 경우)
1) 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
// AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let notiCenter = UNUserNotificationCenter.current()
notiCenter.requestAuthorization(options: [.alert,.sound,.badge]) {(didAllow, e) in}
return true
}
// ViewController.swift
@IBAction func btnAction(_ sender: Any) {
let content = UNMutableNotificationContent()
content.title = "This is title : mustang"
content.subtitle = "This is Subtitle : sub"
content.body = "This is Body : body"
content.badge = 123
content.userInfo = ["name":"홍길동"] // 데이터 넘겨줄 때 사용할 정보
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats:false)
let request = UNNotificationRequest(identifier: "timerdone", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)
}
|
2) 사용자가 클릭한 것을 처리
- delegate = self로 등록
- NUUserNotificationDelegate 프로토콜 구현
- userNotificationCenter(_:didReceive..)구현
1
2
3
4
5
6
7
8
9
10
11
12
|
// AppDelegate.swift에서 application(..didFinishLanching)에
notiCenter.delegate = self 넣은 후,
// AppDelegate.swift, 클릭했을 때의 이벤트 처리 지정했던 userInfo 불러오기
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
if response.notification.request.identifier == "timerdone" {
let userInfo = response.notification.request.content.userInfo
NSLog("값 = \(userInfo["name"])")
}
}
}
|
* 사용자에게 권한 허용 요청 관련 방법
-앱 어플리케이션 자체를 의미하는 UIApplication 싱글턴 객체를 이용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// 인스턴스 참조
let application = UIApplication.shared
// 사용자에 권한 요청할 부분
let setting = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
// 요청
application.registerUserNotificationSettings(setting)
// 사용자가 Don't Allow를 한 경우, .none으로 표현
let check = application.currentUserNotificationSettings
if(check == .none){
// 거절한 경우 처리
}
|
'iOS 기본 (swift)' 카테고리의 다른 글
[iOS - swift] 7. 테이블 뷰 (table view) (0) | 2020.04.03 |
---|---|
[iOS - swift] 6. Delegate 패턴 활용 (ImagePicker) (0) | 2020.04.03 |
[iOS - swift] 4. 뷰 컨트롤러 간 데이터 전달 (0) | 2020.04.02 |
[iOS - swift] 3. 화면전환(present, navigation, segue) (0) | 2020.04.02 |
[iOS - swift] 2. iOS앱의 구조 및 cocoa touch 프레임워크 (2) | 2020.04.02 |
Comments