티스토리 뷰
반응형
AssetMenu.swift
- 값을 저장해 놓을 열거형 정의
import Foundation
enum AssetMenu: String, Identifiable, Decodable {
case creditScore
case bankAccount
case investment
case loan
case insurance
case creditCard
case cash
case realEstate
var id: String { // Identifiable를 채택 시 id를 무조건 설정해줘야 한다.
return self.rawValue
}
var systemImageName: String {
switch self {
case .creditScore:
return "number.circle"
case .bankAccount:
return "banknote"
case .investment:
return "bitcoinsign.circle"
case .loan:
return "hand.wave"
case .insurance:
return "lock.shield"
case .creditCard:
return "creditcard"
case .cash:
return "dollarsign.circle"
case .realEstate:
return "house.fill"
}
}
var title: String {
switch self {
case .creditScore:
return "신용 점수"
case .bankAccount:
return "계좌"
case .investment:
return "투자"
case .loan:
return "대출"
case .insurance:
return "보험"
case .creditCard:
return "카드"
case .cash:
return "현금형수증"
case .realEstate:
return "부동산"
}
}
}
AssetMenuButtonStyle.swift
- 값을 불러와 버튼의 모양을 만들어준다.
import SwiftUI
struct AssetMenuButtonStyle: ButtonStyle {
let menu: AssetMenu
func makeBody(configuration: Configuration) -> some View {
return VStack {
Image(systemName: menu.systemImageName)
.resizable()
.frame(width: 30, height: 30)
.padding([.leading, .trailing], 10)
Text(menu.title)
.font(.system(size: 12, weight: .bold))
}
.padding()
.foregroundColor(.blue)
.background(Color.white)
.clipShape(RoundedRectangle(cornerRadius: 10))
}
}
struct AssetMenuButtonStyle_Previews: PreviewProvider {
static var previews: some View {
HStack(spacing: 24) {
Button("") {
print("")
}
.buttonStyle(AssetMenuButtonStyle(menu: .creditScore))
Button("") {
print("")
}
.buttonStyle(AssetMenuButtonStyle(menu: .bankAccount))
Button("") {
print("")
}
.buttonStyle(AssetMenuButtonStyle(menu: .creditCard))
Button("") {
print("")
}
.buttonStyle(AssetMenuButtonStyle(menu: .cash))
Button("") {
print("")
}
}
.background(Color.gray.opacity(0.2))
}
}
AssetMenuGridView.swift
- ForEach문을 이용하여 menuList의 값을 가져와 Vstack안에 Hstack으로 버튼의 이미지를 표현
import SwiftUI
struct AssetMenuGridView: View {
let menuList: [[AssetMenu]] = [
[.creditScore, .bankAccount, .investment, .loan],
[.insurance, .creditCard, .cash, .realEstate]
]
var body: some View {
VStack(spacing: 20) {
ForEach(menuList, id: \.self) { row in
HStack(spacing: 10) {
ForEach(row) { menu in
Button("") {
print("\(menu.title)버튼 tapped")
}
.buttonStyle(AssetMenuButtonStyle(menu: menu))
}
}
}
}
}
}
struct AssetMenuGridView_Previews: PreviewProvider {
static var previews: some View {
AssetMenuGridView()
}
}
반응형
'Swift' 카테고리의 다른 글
Swift UITabBarController (0) | 2022.04.11 |
---|---|
Swift 배너 만들기 (0) | 2022.04.10 |
SwiftUI를 이용한 간단한 탭바 만들기 (0) | 2022.04.07 |
Swift GCD(Grand Central Dispatch) (0) | 2022.04.03 |
Swift PreviewProvider (0) | 2022.03.28 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 문자열
- Java
- gcd
- autolayout
- swipe
- LazyHStack
- string
- Firebase
- 웹뷰
- Swift
- Apple
- SwiftLint
- UITabBarController
- dictionary
- ios
- subscript
- 라이트모드
- github
- WebView
- UIScrollView
- Alamofire
- NavigationLink
- Observable
- remote config
- Realtime Database
- UIButton
- 다크모드
- SwiftUI
- RxSwift
- Android
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함