草庐IT

swift - 在 selectedIndex 展开单元格

coder 2023-09-10 原文

更新了下面的代码

我正在处理限制为 100 个字符的评论单元格,如果它们包含更多字符,则会显示“显示更多按钮”。

如果按下,确切的单元格应重新加载自身,行数更改为 0 并完全显示该单元格,无论它有多大。

我所取得的成就是重​​新加载单元格,但不会重新加载选定的单元格,这有点随意。

下面是我的放大过程代码

注意:为我的函数更新代码

问题:我必须按两次按钮才能得到结果,最小化和最大化单元格

   @IBAction func readMore(_ sender: UIButton) {


    self.state = !self.state

    print("state" , state)
    self.tapMore.setTitle(self.state ? self.decreaseState: self.expandState, for: .normal)
    self.commentLabel.numberOfLines = (self.state ? self.expandedLines: self.numberOfLines)
    print(self.commentLabel.numberOfLines)
    let myIndexPath = IndexPath(row: sender.tag, section: 0)

    UIView.animate(withDuration: 0.3, animations: {
        self.parentViewControllerCommentCell?.tableView.reloadRows(at: [myIndexPath], with: UITableViewRowAnimation(rawValue: Int(UITableViewAutomaticDimension))!)
    })
}

索引来自

extension CommentTableViewCell {

var indexPath: IndexPath? {
    return (superview as? UITableView)?.indexPath(for: self)
   }
}

注意

print 语句打印出所选单元格(例如 [0, 1] 或 [0,0] 但它不会改变。

而我硬编码我的代码并更改 let myIndexPath = IndexPath(row: indexPath!.row, section: 0)

到 让 myIndexPath = IndexPath(行: 0, 部分: 0)

该功能有效,但会任意重新加载一些单元格并任意放大和缩小单元格。

在带有 row: indexPath!.row 的变量版本中,行状态也没有改变,而硬编码的行在 3 和 0 之间变化。

感谢您的帮助:)

添加

我的评论单元格

class CommentTableViewCell: UITableViewCell {

@IBOutlet weak var likeCountButton: UIButton!
@IBOutlet weak var profileImageView: UIImageView!
@IBOutlet weak var commentLabel: KILabel!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var timeLabel: UILabel!
@IBOutlet weak var likeImageView: UIImageView!


@IBOutlet weak var tapMore: UIButton!

@IBOutlet weak var tapMoreButton: UIButton!


var delegate: CommentTableViewCellDelegate?
var postId : String!

最佳答案

这是让您获得正确索引路径的更好方法。首先,在您的 cellForRow 方法中,将当前索引行作为标记添加到您的显示更多按钮,然后将点击操作添加到您的按钮处理函数。

在您自定义的 UITableViewCell 类中添加一个 UIButton 的导出

class CustomCell: UITableViewCell {
     @IBOutlet var moreButton: UIButton! // Connect your button from storyboard
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell") as! CustomCell
    cell.moreButton.tag = indexPath.row
    /* Just add action normally from storyboard. No need to add target. cell.moreButton.addTarget(self, action:#selector(buttonUp(sender:)), for: .touchUpInside) */

    return cell
}

然后在你的处理函数中,你可以通过读取这个标签来获取正确的索引路径

func tapForMore(sender: UIButton) {
    let myIndexPath = IndexPath(row: sender.tag, section: 0)
    print("myindex", myIndexPath)
    //... other code here
}

关于swift - 在 selectedIndex 展开单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44845247/

有关swift - 在 selectedIndex 展开单元格的更多相关文章

  1. 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

  2. ruby - 单元测试文件 I/O 方法 - 2

    我对单元测试还是比较陌生。我用Ruby编写了一个类,它接受一个文件,在该文件中搜索给定的Regex模式,替换它,然后将更改保存回文件。我希望能够为此方法编写单元测试,但我不知道我将如何去做。有人能告诉我我们如何对处理文件i/o的方法进行单元测试吗? 最佳答案 看看这个HowdoIunit-testsavingfiletothedisk?基本上这个想法是一样的,文件系统是你的类的依赖。所以引入一个可以在你的单元测试中模拟的角色/接口(interface)(这样你在单元测试时就没有依赖性);角色中的方法应该是您从文件系统中需要的所有东西

  3. ruby - 尝试运行 minitest 单元测试时出错 - 2

    尝试使用rubytest/test_foo.rb运行minitest单元测试时出现以下错误:Warning:youshouldrequire'minitest/autorun'instead.Warning:oradd'gem"minitest"'before'require"minitest/autorun"'From:/home/emile/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/minitest/autorun.rb:15:```test_foo.rb看起来像这样:require'minitest/autorun'classTestFoo

  4. ruby 单元测试 : run some code after each failed test - 2

    在Test::Unit中的ruby​​单元测试断言失败后,在执行teardown之前,是否有一些简洁优雅的方法来立即执行我的代码?我正在做一些自动化的GUI测试,并希望在出现问题后立即截图。 最佳答案 如果您使用的是1.9,请不要使用Test::Unit::TestCase作为您的基类。对其进行子类化并覆盖#run_test以进行救援,截取屏幕截图并重新提出:classMyAbstractTestCase或者,我认为这实际上是最简洁的方法,您可以使用before_teardownHook:classMyTestCase这不适用于1.

  5. ruby-on-rails - Ruby on Rails 单表继承(STI)和单元测试问题(使用 PostgreSQL) - 2

    我正在使用带有单个“帐户”表的STI模型来保存用户和技术人员的信息(即用户...8)错误:test_the_truth(用户测试):ActiveRecord::StatementInvalid:PGError:ERROR:关系“技术人员”不存在:从“技术人员”中删除...从本质上讲,标准框架不承认Technicians和Users表(或PostgreSQL称它们为“关系”)不存在,事实上,应该别名为Accounts。有什么想法吗?我对RoR比较陌生,不知道如何解决这个问题而又不完全删除STI。 最佳答案 原来问题是由于存在:./te

  6. ruby-on-rails - 获取当前时间的单元测试代码 - 2

    为获取当前时间的代码编写单元测试的最佳方法是什么?例如,某些对象可能仅在工作日创建,其他对象在检查执行某些操作的权限时会考虑当前时间等。我想我应该模拟Date.today和Time.now。这是正确的做法吗?更新:两种解决方案(a)Time.is和(b)Time.stubs(:now).returns(t)都有效。(a)是非常好的方法,但(b)解决方案将与其他测试代码更加一致。在此question作者要求一个通用的解决方案。对于Ruby,在我的选项中,上述两个解决方案是simpler因此比提取获取当前日期/时间的代码更好。顺便说一句,我建议使用Chronic获得所需的时间,例如requ

  7. ruby - 如何在 ruby​​ 模块中包含单元测试? - 2

    我正在尝试将模块的单元测试包含在与模块本身相同的源文件中,遵循Perlmodulino模型。#!/usr/bin/envrubyrequire'test/unit'moduleModulinodefmodulino_functionreturn0endendclassModulinoTest现在,我可以运行执行此源文件的单元测试。但是,当我从另一个脚本需要/加载它们时,它们也会运行。如何避免这种情况?是否有更惯用的方法来使用Ruby实现此目的,除非不鼓励这种做法? 最佳答案 就我个人而言,我从未听说有人试图在Ruby中这样做。这绝对

  8. ruby - 使用 Ruby 测试单元在一个脚本中并行运行多个测试 - 2

    我在一个ruby​​脚本中有4个测试,我使用命令运行它们rubytest.rb输出看起来像LoadedsuitetestStarted....Finishedin50.326546seconds.4tests,5assertions,0failures,0errors,0pendings,0omissions,0notifications100%passed我想要实现的是,并行运行所有4个测试,而不是按顺序运行。大约4个线程,每个线程运行一个测试,有效地将执行时间减少到4个测试中最慢的一个+并行执行的时间很短。我遇到了this,但这似乎并行运行多个ruby​​测试文件-假设我有test

  9. ruby 测试单元 gem 不显示通过测试的点 - 2

    Ruby测试单元gem不显示已通过测试的点。我在Ubuntu11.04上运行。失败时显示“E”和“F”,但不显示通过。如果我评论gem'test-unit'行,这个问题就会消失,但在这种情况下,test-unit2.x功能(如省略、挂起)不可用。 最佳答案 我更愿意使用“turn”gem来获得更漂亮的测试输出。只需安装gemturn并在您的应用中使用它。 关于ruby测试单元gem不显示通过测试的点,我们在StackOverflow上找到一个类似的问题: ht

  10. ruby - 无法让测试单元启动在 ruby​​ 1.9.2 中工作 - 2

    我正在使用Ruby1.9.2(ruby-vyields:ruby1.9.2p290(2011-07-09revision32553)[x86_64-linux]),我正在尝试让它工作:require'test/unit'classTestStartup当我运行它时,我得到了Loadedsuitetest_startupStartedintest1.Finishedin0.000395seconds.1tests,0assertions,0failures,0errors,0skips我很难找到有关此功能的文档,除了SO等上的零散帖子。是的,我想使用这个功能而不是设置。TIA

随机推荐