草庐IT

ios - UITableView 重复单元格(带有文本字段的自定义单元格)

coder 2023-09-12 原文

我花了好几天时间来解决这个问题,在尝试了很多之后我在这里问了一个问题。我正在使用自定义 UITableViewCell,并且该单元格包含 UITextFields。在将新单元格添加到表格 View 时,表格 View 表现异常,就像它复制单元格一样,当我尝试编辑新单元格的文本字段时,前一个单元格的文本字段也会被编辑。

复制的行为如下:第一个单元格被复制到第三个单元格。我不知道这是由于细胞的可重用性,但谁能告诉我有效的解决方案?

我附上了 UITableViewCell 的屏幕截图。

cellForRow的代码如下:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell : Product_PriceTableViewCell = tableView.dequeueReusableCell(withIdentifier: "product_priceCell") as! Product_PriceTableViewCell

    cell.dropDownViewProducts.index = indexPath.row
    cell.txtDescription.index = indexPath.row
    cell.tfPrice.index = indexPath.row
    cell.dropDownQty.index = indexPath.row
    cell.tfTotalPrice_Euro.index = indexPath.row
    cell.tfTotalPrice_IDR.index = indexPath.row
    cell.dropDownViewTotalDiscount.index = indexPath.row
    cell.dropDownViewDeposit.index = indexPath.row
    cell.tfTotalDeposit_Euro.index = indexPath.row
    cell.tfRemaingAfterDeposit_IDR.index = indexPath.row

    return cell
}

最佳答案

问题是 UITableView 正在重用该单元格,这是您希望获得良好滚动性能的情况。

您应该更新支持表中每一行的数据源以保存用户在字段中输入的文本。

然后在 cellForRowAt 中从您的数据源分配文本字段的文本属性。

换句话说,每次您在屏幕上看到 UITableViewCell 都是相同的实例,UITextField 也是如此,因此它的文本属性也是如此。这意味着每次调用 cellForRowAt 时都需要为其分配正确的文本值。

我不确定你的代码,所以我提供了一个例子来说明我将如何做你想要的事情:

class MyCell: UITableViewCell {

    @IBOutlet weak var inputField: UITextField!
}

class ViewController: UIViewController {

    @IBOutlet weak var table: UITableView!
    var items = [String]()

    fileprivate func setupItems() {
        items = ["Duck",
                 "Cow",
                 "Deer",
                 "Potato"
            ]
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        setupItems()
    }
}

extension ViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // the # of rows will equal the # of items
        return items.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // we use the cell's indexPath.row to
        // to get the item in the array's text
        // and use it as the cell's input field text
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "myCell") as? MyCell else {
            return UITableViewCell()
        }

        // now even if the cell is the same instance
        // it's field's text is assigned each time
        cell.inputField.text = items[indexPath.row]

        // Use the tag on UITextField
        // to track the indexPath.row that
        // it's current being presented for
        cell.inputField.tag = indexPath.row

        // become the field's delegate
        cell.inputField.delegate = self
        return cell
    }
}

extension ViewController: UITextFieldDelegate {
    // or whatever method(s) matches the app's
    // input style for this view
    func textFieldDidEndEditing(_ textField: UITextField) {
        guard let text = textField.text else {
            return // nothing to update
        }
        // use the field's tag
        // to update the correct element
        items[textField.tag] = text
    }
}

关于ios - UITableView 重复单元格(带有文本字段的自定义单元格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46186440/

有关ios - UITableView 重复单元格(带有文本字段的自定义单元格)的更多相关文章

  1. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  2. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  3. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  4. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  5. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  6. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  7. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

  8. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

    我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

  9. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  10. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

随机推荐