我有一个自定义单元格的tableview。下图显示了我的tableview单元格的视图层次结构。
在向表格视图添加行时,我隐藏了“检查图像”。使用以下代码的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不会出现。它仍然是隐藏的。有人能告诉我我在这里做错了吗?
答案 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
}