Swift:从自定义 UITableViewCell 中的 UITextField 检索文本并将其放入数组中

2024-06-01

我正在制作一个非常简单的应用程序,用户在第一个屏幕中输入人数。

在第二个屏幕中,它会生成一些UITableViewCell基于用户在第一个屏幕中输入的数字。这UITableViewCell have a UITextField在其中,一旦用户单击进入第三个屏幕,我将尝试将在这些字段中输入的数据存储在数组中。

我怎样才能做到这一点?
提前致谢!

编辑:我正在使用故事板。

这是调用自定义的代码UITableViewCell看起来像我的UIViewController:

func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        
    var cell: EditingCell = tableView.dequeueReusableCellWithIdentifier("Cell") as EditingCell
    
    if indexPath.row % 2 == 0{
        cell.backgroundColor = UIColor.purpleColor()
    } else {
        cell.backgroundColor = UIColor.orangeColor()
    }
    
    let person = arrayOfPeople[indexPath.row]
    
    cell.setCell(person.name)
    
            
    return cell
}

这是代码UITableViewCell好像:

class EditingCell: UITableViewCell{
    
    @IBOutlet weak var nameInput: UITextField!
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
    
    
    func setCell(name:String){
        self.nameInput.placeholder = name
    }
}

如果表中的行数超过屏幕上可以容纳的行数,则您的方法就会出现问题。在这种情况下,滚动到屏幕外的单元格将被重新使用,并且单元格的内容nameInput文本字段将丢失。如果您可以确定这种情况永远不会发生,请使用以下代码(在处理按钮点击的方法中)来组成数组:

        var arrayOfNames : [String] = [String]()
        for var i = 0; i<self.arrayOfPeople.count; i++ {
            let indexPath = NSIndexPath(forRow:i, inSection:0)
            let cell : EditingCell? = self.tableView.cellForRowAtIndexPath(indexPath) as EditingCell?
            if let item = cell?.nameInput.text {
                arrayOfNames.append(item)
            }
        }
        println("\(arrayOfNames)")

或者....

但是,如果单元格可能会滚动到屏幕之外,我建议采用不同的解决方案。设置delegate为了nameInput文本字段,然后使用委托方法来获取输入的名称。

首先,将变量添加到视图控制器,以保存当前正在编辑的文本字段的数组和行号。

    var arrayOfNames : [String] = [String]()
    var rowBeingEdited : Int? = nil

然后,在你的cellForRowAtIndexPath方法,添加:

    cell.nameInput.text = "" // just in case cells are re-used, this clears the old value
    cell.nameInput.tag = indexPath.row
    cell.nameInput.delegate = self

然后添加两个新函数,以捕获文本字段何时开始/结束编辑:

func textFieldDidEndEditing(textField: UITextField) {
    let row = textField.tag
    if row >= arrayOfNames.count {
        for var addRow = arrayOfNames.count; addRow <= row; addRow++ {
            arrayOfNames.append("") // this adds blank rows in case the user skips rows
        }
    }
    arrayOfNames[row] = textField.text
    rowBeingEdited = nil
}

func textFieldDidBeginEditing(textField: UITextField) {
    rowBeingEdited = textField.tag
}

当用户点击该按钮时,他们可能仍在编辑其中一个名称。为了满足这一点,请将以下内容添加到处理按钮点击的方法中:

        if let row = rowBeingEdited {
            let indexPath = NSIndexPath(forRow:row, inSection:0)
            let cell : EditingTableViewCell? = self.tableView.cellForRowAtIndexPath(indexPath) as EditingTableViewCell?
            cell?.nameTextField.resignFirstResponder()
        }

这会强制文本字段完成编辑,从而触发didEndEditing方法,从而将文本保存到数组中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift:从自定义 UITableViewCell 中的 UITextField 检索文本并将其放入数组中 的相关文章

随机推荐

  • ChartWrapper 中的条形图注释

    我正在使用 ChartWrapper 生成数据集的条形图 数据集来自 dataSourceUrl 不是内部数据表 这是源代码片段 var chart wrap6 new google visualization ChartWrapper c
  • jQuery 仅匹配 div 中的部分 id

    昨天晚上我遇到了一个不寻常的情况 我只需要匹配 id 的一部分 让我用一个例子来让大家明白 我有几个像这样的div div div div div div div jQuery 就像 jQuery div dont know what to
  • 在 iOS 中录制音频并永久保存

    我制作了 2 个 iPhone 应用程序 可以录制音频并将其保存到文件中并再次播放 其中之一使用 AVAudiorecorder 和 AVAudioplayer 第二个是苹果的在这里说话 http developer apple com l
  • 将按键和焦点事件附加到 contenteditable div 内的元素

    我想附上keypress and focusoutcontenteditable 内段落的事件处理程序div 下面的代码似乎不起作用 div p Test p p Test p p Test p div p1 bind keypress f
  • Schedulers.io() 不返回主线程

    我正在使用 RxParse 来解析查询的异步负载 但是当我使用 subscribeOn Schedulers io 订阅我的可观察值时 我的 onCompleted 方法永远不会在主线程上调用 相反 我的 onCompleted 方法是在工
  • React.JS:类型错误:无法读取 findLoader 处未定义的属性“过滤器”

    我正在按照教程进行工作 https www fullstackreact com articles react tutorial cloning yelp routing https www fullstackreact com artic
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • Django - 具有自动完成功能的 Javascript 动态内联 FormSet

    我正在尝试制作一种能够附加参与者的调度程序事件编辑器 Models class Session models Model start time models DateTimeField end time models DateTimeFie
  • 如何获取Django当前的语言?

    如何获取 Django 中的当前语言 特别感兴趣的功能是django utils translation get language 它返回当前线程中使用的语言 看文档 https docs djangoproject com en dev
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 制表符 - 当字体大小更改时调整列标题大小

    我在用制表机 http tabulator info 以及默认的 fitData 函数来调整单元格大小 当我 a 设置默认字体大小并 b 使用 rowFormatter 更改行字体大小时 这完全按照预期工作 rowFormatter fun
  • 如何在 HQL 中编写 Like 查询

    我想搜索以特定字母开头的特定字符串 因此 例如如果起始字母是 A 那么它应该产生一个结果 其中包含所有带有字母的字符串 A 我该如何实现这一目标 我的查询如下所示 Query qry session createQuery From Reg
  • 是否允许在流水线 PL/SQL 表函数中使用 SELECT?

    管道函数的文档指出 在 SQL 语句 通常是SELECT 并且在大多数示例中 管道函数用于数据生成或转换 接受客户作为参数 但不发出任何 DML 语句 现在 从技术上讲 可以使用 SELECT 而不会出现 Oracle 中的任何错误 ORA
  • Solr协会

    最近几天我们正在考虑使用 Solr 作为我们选择的搜索引擎 我们需要的大多数功能都是开箱即用的或者可以轻松配置 然而 我们绝对需要的一项功能似乎在 Solr 中被很好地隐藏 或缺失 我将尝试用一个例子来解释 我们有很多实际上是企业的文件
  • 何时在 C++ 中使用 __declspec(dllexport)

    我正在制作这个 DLL 项目 并且不包含任何特定于编译器的宏 在我的 DLL 文件中导入方法后 导入器 exe 文件编译干净并且没有生成错误 他们从事不同的项目 但解决方案相同 我是否因为没有使用任何这些调用约定而把事情搞砸了 我的 DLL
  • 从后端服务器使用 google fit api

    我正在编写一个 Android 应用程序 它需要从后端服务器读取用户的健身数据 步数 卡路里等 如果需要 该服务器将读取数据并向 Android 应用程序推送通知 我设法完成身份验证部分 应用程序现在将从 oauth 流接收到的代码发送到后
  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • 需要 gem 是否会加载所有内容,包括我不使用的东西?

    Assume x是一颗宝石 包含两者Hello and Goodbye类 如果我写一个程序require x 但仅使用Hello班级 是个Goodbye类也加载了吗 您包含脚本或文件 而不是 gem With require x 你加载文件
  • Swift 对异步编程有什么语言级别的支持(如果有)?

    当应用程序必须通过不可预测的网络 例如智能手机应用程序 进行通信时 异步编程对于响应式用户界面来说是必须的 用户界面必须保持响应 同时等待结果从互联网上某处的服务器返回 在大多数语言中 应用程序程序员必须实现自己的状态机 可能使用闭包 来响
  • Swift:从自定义 UITableViewCell 中的 UITextField 检索文本并将其放入数组中

    我正在制作一个非常简单的应用程序 用户在第一个屏幕中输入人数 在第二个屏幕中 它会生成一些UITableViewCell基于用户在第一个屏幕中输入的数字 这UITableViewCell have a UITextField在其中 一旦用户