Ios在tableview单元格内显示/隐藏视图

时间:2017-11-01 04:30:27

标签: ios swift uitableview uistackview

我有一个自定义单元格的tableview。下图显示了我的tableview单元格的视图层次结构。

enter image description here

在向表格视图添加行时,我隐藏了“检查图像”。使用以下代码的imageview。

t

当点击一行时,我再次显示imageview。以下是代码

CREATE TABLE json_documents (
  id    RAW(16) NOT NULL,
  data  CLOB,
  CONSTRAINT json_documents_pk PRIMARY KEY (id),
  CONSTRAINT json_documents_json_chk CHECK (data IS JSON)
);

INSERT INTO json_documents (id, data)
VALUES (SYS_GUID(),
        '{
          "FirstName"      : "John",
          "LastName"       : "Doe",
          "Job"            : "Clerk",
          "Address"        : {
                              "Street"   : "99 My Street",
                              "City"     : "My City",
                              "Country"  : "UK",
                              "Postcode" : "A12 34B"
                             },
          "ContactDetails" : {
                              "Email"    : "john.doe@example.com",
                              "Phone"    : "44 123 123456",
                              "Twitter"  : "@johndoe"
                             },
          "DateOfBirth"    : "01-JAN-1980",
          "Active"         : true
         }');




SELECT a.data.FirstName,
       a.data.LastName,
       a.data.Address.Postcode AS Postcode,
       a.data.ContactDetails.Email AS Email
FROM   json_documents a;


FIRSTNAME       LASTNAME        POSTCODE   EMAIL
--------------- --------------- ---------- -------------------------
Jayne           Doe             A12 34B    jayne.doe@example.com
John            Doe             A12 34B    john.doe@example.com

2 rows selected.

但问题是当我点击一行时没有任何反应。系统执行func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "accountCell", for: indexPath) as! AccountsTableViewCell cell.checkImage.isHidden = true return cell } 代码行,但imageview不会出现。它仍然是隐藏的。有人能告诉我我在这里做错了吗?

3 个答案:

答案 0 :(得分:1)

您必须管理您的阵列(数据源)!单击行时,更新该索引的数组并重新加载表视图。

示例:

您的数组应该有一些标记,如isChecked,将其值从true切换为false,反之亦然。

cellForRowAtIndexPath检查此标记并根据该标记显示或隐藏图像!

答案 1 :(得分:1)

您无法在单元格本身中跟踪单元格检查状态;单元格对象只是一个数据视图,当表格视图滚动时,单元格将被重用。

我建议使用Set<IndexPath>。在cellForRowAt中,您可以检查集合的内容,以确定是否应隐藏复选标记:

var checked = Set<IndexPath>()

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

    cell.checkImage.isHidden = self.checked.contains(indexPath)

    return cell
}

在您的didSelectRowAt中,只需切换设置成员资格并重新加载行

即可
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if self.checked.contains(indexPath) {
        self.checked.remove(indexPath) 
     } else {
        self.checked.insert(indexPath)
     }

    tableView.reloadRows(at:[indexPath], with:.fade)
}

答案 2 :(得分:0)

首先要确定你的

 tableview.delegate = self

第二件事就是在索引处选择行使用该代码

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableView.cellForRow(at: indexPath) as! AccountsTableViewCell


    cell.checkImage.isHidden = false
}