You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift导航栏按钮实现:无文本框不离开VC存用户输入字符串到数组

最佳实现方案:使用UIAlertController带输入框

嘿,这个需求用系统自带的UIAlertController就能完美搞定——不用额外添加文本框,全程在当前ViewController内完成,步骤也很清晰:

核心思路

点击导航栏的添加按钮后,弹出一个带输入框的系统警告弹窗,用户输入内容并确认后,将字符串直接加入目标数组,全程不需要离开当前页面。

具体实现步骤(以Swift为例)

1. 给导航栏添加触发按钮

在viewDidLoad方法中初始化数组,并创建导航栏右侧的添加按钮,绑定点击事件:

class YourViewController: UIViewController {
    // 声明要存储字符串的数组
    private var myStringsArray = [String]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.title = "字符串管理"
        
        // 创建导航栏添加按钮
        let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(showInputAlert))
        navigationItem.rightBarButtonItem = addButton
    }
}

2. 实现弹窗输入与数组添加逻辑

编写点击按钮后的弹窗方法,包含输入框、确认/取消按钮,以及输入验证和数组添加逻辑:

@objc private func showInputAlert() {
    let alert = UIAlertController(title: "添加新字符串", message: "请输入要添加的内容", preferredStyle: .alert)
    
    // 给弹窗添加输入框
    alert.addTextField { textField in
        textField.placeholder = "请输入内容"
        // 可根据需求设置键盘类型、输入限制等
        textField.keyboardType = .default
        textField.autocapitalizationType = .sentences
    }
    
    // 确认添加按钮
    let confirmAction = UIAlertAction(title: "添加", style: .default) { [weak self] _ in
        guard let inputText = alert.textFields?.first?.text, 
              !inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else {
            // 处理空输入或纯空格的情况
            let emptyAlert = UIAlertController(title: "提示", message: "请输入有效内容", preferredStyle: .alert)
            emptyAlert.addAction(UIAlertAction(title: "确定", style: .default))
            self?.present(emptyAlert, animated: true)
            return
        }
        
        // 将输入内容加入数组
        self?.myStringsArray.append(inputText)
        
        // 可选:给用户反馈添加成功
        let successAlert = UIAlertController(title: "添加成功", message: "已加入数组:\(inputText)", preferredStyle: .alert)
        successAlert.addAction(UIAlertAction(title: "确定", style: .default))
        self?.present(successAlert, animated: true)
    }
    
    // 取消按钮
    let cancelAction = UIAlertAction(title: "取消", style: .cancel)
    
    alert.addAction(confirmAction)
    alert.addAction(cancelAction)
    
    // 弹出弹窗
    present(alert, animated: true)
}

方案优势

  • 完全基于系统组件,无需自定义文本框布局,适配各种屏幕和系统版本
  • 全程在当前ViewController内完成,没有页面跳转
  • 系统自动处理键盘弹出、输入交互等细节,减少自定义代码量
  • 可灵活扩展输入验证逻辑(比如长度限制、格式校验),只需在确认回调中添加判断即可

内容的提问来源于stack exchange,提问作者aleksabaskot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:25:03