当前位置: 首页 > 面试题库 >

在Swift中点击展开单元格

归泽宇
2023-03-14
问题内容

我一直在尝试在我的应用程序中实现一项功能,以便当用户在我的表格视图中点击一个单元格时,该单元格会向下扩展以显示注释。我在Objective-
C中找到了很多这样的例子,但是我还没有找到Swift的例子。

我试图将其翻译为Swift:

var selectedRowIndex = NSIndexPath()
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    selectedRowIndex = indexPath
    tableView.beginUpdates()
    tableView.endUpdates()
}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if selectedRowIndex == selectedRowIndex.row && indexPath.row == selectedRowIndex.row {
        return 100
    }
    return 70
}

但是,这似乎使应用程序崩溃了。

有任何想法吗?

编辑:

这是我的cellForRowAtIndexPath代码:

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell:CustomTransactionTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomTransactionTableViewCell

    cell.selectionStyle = UITableViewCellSelectionStyle.None

    if tableView == self.searchDisplayController?.searchResultsTableView {
        cell.paymentNameLabel.text = (searchResults.objectAtIndex(indexPath.row)) as? String
        //println(searchResults.objectAtIndex(indexPath.row))
        var indexValue = names.indexOfObject(searchResults.objectAtIndex(indexPath.row))
        cell.costLabel.text = (values.objectAtIndex(indexValue)) as? String
        cell.dateLabel.text = (dates.objectAtIndex(indexValue)) as? String

        if images.objectAtIndex(indexValue) as NSObject == 0 {
            cell.paymentArrowImage.hidden = false
            cell.creditArrowImage.hidden = true
        } else if images.objectAtIndex(indexValue) as NSObject == 1 {
            cell.creditArrowImage.hidden = false
            cell.paymentArrowImage.hidden = true
        }
    } else {
        cell.paymentNameLabel.text = (names.objectAtIndex(indexPath.row)) as? String
        cell.costLabel.text = (values.objectAtIndex(indexPath.row)) as? String
        cell.dateLabel.text = (dates.objectAtIndex(indexPath.row)) as? String

        if images.objectAtIndex(indexPath.row) as NSObject == 0 {
            cell.paymentArrowImage.hidden = false
            cell.creditArrowImage.hidden = true
        } else if images.objectAtIndex(indexPath.row) as NSObject == 1 {
            cell.creditArrowImage.hidden = false
            cell.paymentArrowImage.hidden = true
        }
    }
    return cell
}

这是插座设置:

在此处输入图片说明


问题答案:

if语句中的第一个比较永远不会为真,因为您正在将indexPath与整数进行比较。您还应该使用表中不能包含的行值来初始化selectedRowIndex变量,例如-1,因此在表首次加载时不会展开任何内容。

var selectedRowIndex: NSIndexPath = NSIndexPath(forRow: -1, inSection: 0)

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.row == selectedRowIndex.row {
        return 100
    }
    return 70
}

斯威夫特4.2 var selectedRowIndex: NSIndexPath = NSIndexPath(row: -1, section: 0)



 类似资料:
  • 问题内容: 我知道这个问题已经在Objective- C中解决了,但是我在Swift中还没有看到任何解决方案。我试图转换这篇文章的解决方案代码,但出现错误: 我认为问题出在这一行(请参见此处的错误): …我是根据以下内容从Objective-C转换而来的: 最后,对于如何调用此函数,我也有疑问。据我了解,该函数应传递给viewDidLoad()中的Selector,如下所示: 因为我遇到了前面提到

  • 问题内容: 如何在Swift中的tableView单元中以编程方式嵌入?我就是那样做 问题答案: 这是您可以在单元格上嵌入的方法。 这是切换调用贝克方法 @LeoDabus 。 注意:如果您可能有多个,则应创建一个CustomCell子类并配置您的内部 方法而不是表视图方法。当将可重用的队列释放出队列时,将其投射到您的CustomCell中这是@LeoDabus的示例

  • 下面是我试图实现的布局的快照。 我这里有两个问题: > 现在,页面加载时打开了所有的手风琴面板。我希望它最初处于关闭状态(如选项1)。 我没有看到任何切换功能或任何与PrimeFaces Accordian相关的东西。只有widgetvar.show()函数,但它对我没有帮助。

  • 问题内容: 在我当前的swing项目中,我有一个JList显示所有活动套接字的窗口,每个单元都有一个JButton关闭该套接字的窗口。但是JButton单元格中的不可点击:不会触发监听器。 我将代码修改为最少,如下所示。 该列表看起来不错,但其中的按钮不可单击。我是错了还是JList不支持JButton被解雇? 问题答案: 尽管您无法获得与普通按钮单击相同的视觉效果,但以下示例似乎可行。也许某个绘

  • 本文向大家介绍Android实现可点击展开的TextView,包括了Android实现可点击展开的TextView的使用技巧和注意事项,需要的朋友参考一下 概述 Android开发过程中,经常遇到 Textview 展示不完全的情况。 遇到此情况,通常的处理是: 方案一 Textview 添加 android:ellipsize 属性,让展示不完的部分使用省略号代替。 方案二 Textview 采

  • 问题内容: 我有一个应用程序,当单击uibutton时,我想打开另一个已安装的应用程序(即位智)。我该怎么做?太谢谢了。 问题答案: 试试这个。例如,您要打开一个Instagram应用程序: