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
相关产品推荐
相关产品推荐

