所以我有一个带有自定义单元格的TableView,我从服务器获取数据。我有一个变量'selectedIndex',我用它来跟踪并添加一个复选标记附件到我的单元格。奇怪的是,它只有在我滚动选定的单元格后才能工作(带有indexPath.row的单元格等于离开屏幕并返回。这是我的willDisplayCell方法中的代码:
if selectedIndex == indexPath.row {
if let accessory = cell.viewWithTag(528) as? UITableViewCell {
accessory.frame = (cell.checkmarkView.bounds.offsetBy(dx: 0, dy: 7))
accessory.accessoryType = .checkmark
accessory.isUserInteractionEnabled = false
accessory.backgroundColor = UIColor.clear
accessory.tag = 528
accessory.isHidden = false
print("accessory not nil")
} else {
let accessory = UITableViewCell()
accessory.frame = (cell.checkmarkView.bounds.offsetBy(dx: 0, dy: 7))
accessory.accessoryType = .checkmark
accessory.isUserInteractionEnabled = false
accessory.backgroundColor = UIColor.clear
accessory.tag = 528
accessory.isHidden = false
cell.addSubview(accessory)
print("accessory nil")
}
} else {
let accessory = cell.viewWithTag(528)
accessory?.isHidden = true
}
例如,当所选索引为0时,在第一个视图中不显示复选标记,并打印日志(“附件nil”)。当我在屏幕上的索引0滚动单元格并再次滚动到它时,现在显示复选标记并打印日志(“附件不是零”)。有关详细信息,点击单元格的工作方式与预期一致。
编辑:
我知道我正在向我的手机中添加另一个TableViewCell!我只是这样做因为我需要我的复选标记附件处于与默认位置不同的位置(左对齐,顶部对齐)(右对齐,垂直居中)。所以我所做的是在我的XIB中添加一个位于所需位置的视图(右对齐,顶部对齐),并将我编程的单元格对齐。如果你能告诉我另一种方法,我们将不胜感激。
从第一个if中删除了cell.addSubview。行为仍然相同。
谢谢!
答案 0 :(得分:1)
您要将$(document).on('click', '#submit', function () {
$.ajax({
type: 'POST',
url: '/ControllerName/Post',
data: {
value: JSON.stringify($('#number').val())
},
success: function (data) {
alert(data);
},
error: function (data) {
alert("An Issue has occured");
}
});
})
添加到已退出的原始单元格中,这是不必要的,您需要在public void Post([FromBody]string value) //convert string to double later within method
数据源方法中实现此逻辑,
如果您的配件视图需要自定义位置,请使用UITableViewCell
检查我的更新代码
尝试此操作
cellForRowAt
答案 1 :(得分:0)
UITableView
将通过重复使用来优化您的细胞。因此,在您的情况下,最好使用tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath)
而不是自己调用Cell的构造函数,或者通过查找它的标记找回单元格。
除此之外,确定单元状态的部分应该在UITableView
的{{1}}函数中,而不是willDisplayCell。这可能会解决您的问题并防止重复使用单元格的问题。