ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SwiftUI 3.0 Button的使用 相当于UIButton控件

2022-01-06 13:34:31  阅读:305  来源: 互联网

标签:控件 Button action singIn 3.0 buttonStyle configuration View


//
//  ContentView.swift
//  ButtonControl
//
//  Created by lujun on 2021/12/19.
//

import SwiftUI

struct ContentView: View {
    var body: some View {
//         basiceButton
        //ScrollView(.vertical, showsIndicators: true) {
//            addToContainers
//        styleButtonIOS
        customButtonStyle
        //}
    }
    
    //MARK: - button的基本使用
    var basiceButton : some View {
        VStack(spacing:20) {
            HStack {
                Button(action: {
                    singIn()
                } ,label: {
                    Text("Sign In 1")
                })
                Button(action: singIn) {
                    Text("Sign In 2")
                }
             }
            HStack {
                Button("Register 1")
                {
                    register()
                }
                Button("Register 1",action: register)
            }
        }
    }
    private func singIn(){
        debugPrint("singIn")
    }
    private func register(){
        debugPrint("register")
    }
    
    //MARK: - 添加容器
    var addToContainers: some View {
        List {
            ForEach(items) { item in
                Text(item.title) + Text("\t\(item.desc)")
            }
            Button("Add Item",action: addItem)
        }
    }
    struct Item: Identifiable {
        let id = UUID()
        let title: String
        let desc: String
    }
    @State private var items: [Item] = []
    private func addItem() -> Void {
        let newItem = Item(title: "new items title", desc: "new Item Desc")
        items.append(newItem)
    }
    
    //MARK: - styleButtonIOS button自带的样式
    var styleButtonIOS: some View {
        VStack(spacing: 20) {
            Button("Sign In",action: singIn)
                .buttonStyle(PlainButtonStyle())
            Button("Sign In",action: singIn)
                .buttonStyle(BorderlessButtonStyle())
            Button("Sign In",action: singIn)
                .buttonStyle(DefaultButtonStyle())
            #if os(macOS)
            Button("Sign In",action: singIn).buttonStyle(.bordered)
            Button("Sign In",action: singIn).buttonStyle(BorderlessButtonStyle())
            #endif
            
        }
    }
     
    var customButtonStyle: some View {
        VStack(spacing: 20) {
            Button("Scale Effect",action: singIn)
                .buttonStyle(ScaleEffectButtonStyle())
            Button("Red Bordered",action: singIn)
                .buttonStyle(RedBorderedButtonStyle())
            Button("Scale Effect + Bordered",action: singIn)
                .buttonStyle(RedBorderedButtonStyle())
                .buttonStyle(ScaleEffectButtonStyle())
            Button("Scale Effect + Bordered",action: singIn)
                .buttonStyle(ScaleEffectButtonStyle())
                .buttonStyle(RedBorderedButtonStyle())
            Button("Long Press Tap",action: singIn)
                .buttonStyle(LongPressButtonStyle())
            Button("ComposeButtonStyle",action: singIn)
                .buttonStyle(ComposeButtonStyle())
        }
    }
    
    struct ScaleEffectButtonStyle : ButtonStyle {
        func makeBody(configuration: Configuration) -> some View {
            HStack {
                Spacer()
                configuration.label
                    .padding()
                    .foregroundColor(configuration.isPressed ? .red: .white)
                Spacer()
            }
            .frame(width: 300)
            .background(Color.blue.cornerRadius(10.0))
            .scaleEffect(configuration.isPressed ? 0.9 : 1.0)
        }
    }

    struct RedBorderedButtonStyle : PrimitiveButtonStyle {
        func makeBody(configuration: Configuration) -> some View {
            Button(configuration)
                .border(Color.red,width: 2)
        }
    }
    
    struct LongPressButtonStyle: PrimitiveButtonStyle {
        func makeBody(configuration: Configuration) -> some View {
             Button(configuration)
                .gesture(
                 LongPressGesture()
                    .onEnded({ _ in
                        configuration.trigger()
                    })
                )
        }
    }
    
    struct ComposeButtonStyle: PrimitiveButtonStyle {
        func makeBody(configuration: Configuration) -> some View {
            Button(configuration)
                .buttonStyle(LongPressButtonStyle())
                .buttonStyle(RedBorderedButtonStyle())
                .buttonStyle(ScaleEffectButtonStyle())
        }
    }
    
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

标签:控件,Button,action,singIn,3.0,buttonStyle,configuration,View
来源: https://www.cnblogs.com/Johnson-Swift/p/15770680.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有