일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- navigationbar
- 테이블뷰 셀 밀어서 삭제
- snapkit
- AppleLogin
- testflight error
- RxCocoa
- 로그출력
- codebase
- 비공개 앱 배포
- Business Manager
- 하단 네비게이션바
- archive error
- failed: No such file or directory (2)
- reactorkit
- RxSwift
- 스토리보드 없이
- 로그 찍기
- print vs dump
- iOS 광고달기
- 테이블 뷰
- color 변경
- Apple Enterprise
- MVVM
- CryptoSwift
- 소셜로그인
- 백그라운드 진입시 화면
- 화면 가리기
- 아카이브 에러
- then
- 테이블뷰 밀어서 삭제
- Today
- Total
ukSeung iOS
[Swift] Toast메시지 띄우기 본문
안녕하세요 욱승입니다.
이 포스팅에서는 Toast메세지에 대해 알아보겠습니다.
아시는 분들은 아시겠지만 안드로이드에서는 Toast메시지가 내장 되어있지만 iOS에서는 Toast메시지를 지원하지 않기 때문에 라이브러리를 사용해야하는데요.
Podfile
라이브러리 버전
자주쓰이는 세가지 정도만 알아보겠습니다!
예제
//
// ViewController.swift
// ToastMessageExample
//
// Created by plsystems on 2023/03/10.
//
import UIKit
import Then
import SnapKit
// MARK: - Protocol, View 속성에 관한 내용
protocol ViewAttributes: AnyObject {
func setUI()
func setAttributes()
}
class ViewController: UIViewController, ViewAttributes {
// MARK: - create Instance, Use Then
lazy var btn1 = UIButton().then {
$0.setTitle("btn1", for: .normal)
$0.setTitleColor(.white, for: .normal)
$0.backgroundColor = .systemBlue
$0.layer.cornerRadius = 5
$0.tag = 1
$0.addTarget(self, action: #selector(btnAction(_:)), for: .touchUpInside)
}
lazy var btn2 = UIButton().then {
$0.setTitle("btn2", for: .normal)
$0.setTitleColor(.white, for: .normal)
$0.backgroundColor = .systemBlue
$0.layer.cornerRadius = 5
$0.tag = 2
$0.addTarget(self, action: #selector(btnAction(_:)), for: .touchUpInside)
}
lazy var btn3 = UIButton().then {
$0.setTitle("btn3", for: .normal)
$0.setTitleColor(.white, for: .normal)
$0.backgroundColor = .systemBlue
$0.layer.cornerRadius = 5
$0.tag = 3
$0.addTarget(self, action: #selector(btnAction(_:)), for: .touchUpInside)
}
override func viewDidLoad() {
super.viewDidLoad()
setUI()
setAttributes()
}
// MARK: - addSubview
func setUI() {
self.view.addSubview(btn1)
self.view.addSubview(btn2)
self.view.addSubview(btn3)
}
// MARK: - Autolayout
func setAttributes() {
btn1.snp.makeConstraints {
$0.top.equalTo(self.view.safeAreaLayoutGuide).offset(20)
$0.centerX.equalToSuperview()
$0.width.equalTo(100)
$0.height.equalTo(30)
}
btn2.snp.makeConstraints {
$0.top.equalTo(btn1.snp.bottom).offset(20)
$0.centerX.equalToSuperview()
$0.width.equalTo(100)
$0.height.equalTo(30)
}
btn3.snp.makeConstraints {
$0.top.equalTo(btn2.snp.bottom).offset(20)
$0.centerX.equalToSuperview()
$0.width.equalTo(100)
$0.height.equalTo(30)
}
}
// MARK: - 버튼 클릭, tag로 분기처리
@objc func btnAction(_ sender: Any) {
guard let btn = sender as? UIButton else {
print("오류발생")
return
}
switch btn.tag {
case 1:
makeToast(message: "makeToast")
case 2:
makeToast2(message: "makeToast2", duration: 3.0, position: .center)
case 3:
guard let heart = UIImage(systemName: "heart.fill") else {return}
makeToast3(message: "makeToast3", duration: 3.0, position: .bottom, title: "title", image: heart)
default:
break
}
}
}
//
// ToastHelper.swift
// ToastMessageExample
//
// Created by plsystems on 2023/03/10.
//
import Toast_Swift
// MARK: - Normal Toast, duration 3초(Default)/ position 하단(Default)
/// Normal Toast, Duration 3초(Default), Position 하단(Default)
func makeToast(message: String) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
let keyWindow = scene.windows.first(where: { $0.isKeyWindow })
keyWindow?.rootViewController?.view.makeToast(message)
}
}
// MARK: - Normal Toast, Message 내용 / duration 지속시간 / position Toast위치
/// Normal Toast 2, Message 내용 / duration 지속시간 / position Toast위치
func makeToast2(message: String, duration: CGFloat, position: ToastPosition) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
let keyWindow = scene.windows.first(where: { $0.isKeyWindow })
keyWindow?.rootViewController?.view.makeToast(message, duration: duration, position: position)
}
}
// MARK: - Image, Title Toast, Message 내용 / duration 지속시간 / position Toast위치 / title 타이틀 / image 이미지
///Image, Title Toast, Message 내용 / duration 지속시간 / position Toast위치 / title 타이틀 / image 이미지
func makeToast3(message: String, duration: CGFloat, position: ToastPosition, title: String, image: UIImage) {
if let scene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
let keyWindow = scene.windows.first(where: { $0.isKeyWindow })
keyWindow?.rootViewController?.view.makeToast(message, duration: duration, position: position, title: title, image: image)
}
}
결과
결론
이런걸 보면 안드로이드와 iOS는 개발방식은 비슷하지만 다름을 느낀다.
당연히 내장 되어 있겠지 하는 기능이나 객체가 없다던가 ..
그치만 언제나 그랬듯 정답을 찾자 ㅋ
나 좀 멋있었을지도 ?
소스는 GitHub에서 보실수 있습니다.
GitHub - shinseunguk/ToastMessageExample: Toast_Swift
Toast_Swift. Contribute to shinseunguk/ToastMessageExample development by creating an account on GitHub.
github.com
Reference
GitHub - scalessec/Toast-Swift: A Swift extension that adds toast notifications to the UIView object class.
A Swift extension that adds toast notifications to the UIView object class. - GitHub - scalessec/Toast-Swift: A Swift extension that adds toast notifications to the UIView object class.
github.com
'iOS > Library' 카테고리의 다른 글
[Swift] 구글 AdMob, 앱에 광고달기 (0) | 2023.03.15 |
---|---|
[iOS] CocoaPods could not find compatible versions for pod (0) | 2023.03.14 |
[Swift] JSPhoneFormat 휴대폰번호 포맷팅 (0) | 2023.02.20 |
[Swift] Then 라이브러리 예제 (0) | 2023.02.20 |
[Swift] 에러로그 - Ignoring ffi-1.15.5 because its extensions are not built. Try: gem pristine ffi --version 1.15.5 (0) | 2023.02.20 |