ukSeung iOS

[Swift] Toast메시지 띄우기 본문

iOS/Library

[Swift] Toast메시지 띄우기

욱승 2023. 3. 10. 10:17

안녕하세요 욱승입니다.

이 포스팅에서는 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)
    }
}

 

 

결과

 

1 ~ 3 까지 차례대로 누른 화면

 

결론

이런걸 보면 안드로이드와 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

 

728x90
반응형