SwiftUI AlertWithTextField 有文本框的弹出警告

SwiftUI中的Alert还不完善不能添加文本框,于是要用到UIKIt

  1. 新建一个Swift文件
//
//  AlertWithTextField.swift
//  Potatoes
//
//  Created by Diego on 2021/2/25.
//

import Foundation
import UIKit
import SwiftUI

public func alertWithTextField(title: String, message: String) -> String {
    let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
    var textFieldText: String = ""
    alert.addTextField() { textField in
        textField.placeholder = "在此输入内容"
        
    }
    alert.addAction(UIAlertAction(title: "取消", style: .cancel) { _ in })
    alert.addAction(UIAlertAction(title: "确认", style: .default) {_ in
                        let textField = alert.textFields![0]
        textFieldText = textField.text ?? ""
        print( textField.text ?? "" )
    })
    showAlert(alert: alert)
    return textFieldText
}

func showAlert(alert: UIAlertController) {
    if let controller = topMostViewController() {
        controller.present(alert, animated: true)
    }
}

private func keyWindow() -> UIWindow? {
    return UIApplication.shared.connectedScenes
    .filter {$0.activationState == .foregroundActive}
    .compactMap {$0 as? UIWindowScene}
    .first?.windows.filter {$0.isKeyWindow}.first
}

private func topMostViewController() -> UIViewController? {
    guard let rootController = keyWindow()?.rootViewController else {
        return nil
    }
    return topMostViewController(for: rootController)
}

private func topMostViewController(for controller: UIViewController) -> UIViewController {
    if let presentedController = controller.presentedViewController {
        return topMostViewController(for: presentedController)
    } else if let navigationController = controller as? UINavigationController {
        guard let topController = navigationController.topViewController else {
            return navigationController
        }
        return topMostViewController(for: topController)
    } else if let tabController = controller as? UITabBarController {
        guard let topController = tabController.selectedViewController else {
            return tabController
        }
        return topMostViewController(for: topController)
    }
    return controller
}

  1. 返回值为文本框内容:String
public func alertWithTextField(title: String, message: String) -> String 
  1. 在SwiftUI中直接调用
                Button("重命名"){
                    let newFolderName = alertWithTextField(title: "重命名", message: "输入要新的文件夹名称")
                    print("新文件夹名称:\(newFolderName)")
                    
                }
                //最后在这里写上你需要的代码 newFolderName是返回来的String
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值