gpt4 book ai didi

ios - 在 TableView 范围之外更改元素值

转载 作者:行者123 更新时间:2023-11-28 05:34:25 25 4
gpt4 key购买 nike

我有一个带有 customCell 的 TableView。我在 cellForRowAtIndexPath: 中设置了 customCell 元素的值。没问题。但我想更改 cellForRowAtIndexPath: 范围之外的一些 customCell 元素值。例如,在 Swipe 之后,我想更改我的 swipe 函数中单元格元素的值

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {

let cell:customCell = self.tableView?.dequeueReusableCellWithIdentifier("customCell")! as customCell
let rowData: NSDictionary = self.tableData[indexPath.row] as NSDictionary
let imageSwipeLeft = UISwipeGestureRecognizer(target: self, action: "imageSwiped:")
imageSwipeLeft.direction = .Left
let urlString: NSString = rowData["testImage"] as NSString

self.indexPathArray += [indexPath]

cell.testLabel.text = "Test Label"

cell.testImage.image = image
cell.testImage.tag = indexPath.row
cell.testImage.addGestureRecognizer(imageSwipeLeft)
cell.testImage.userInteractionEnabled = true

ImageLoader.sharedLoader.imageForUrl(urlString, completionHandler:{(image: UIImage?, url: String) in
cell.testImage.image = image
cell.testImage.layer.borderWidth = 6;
cell.testImage.layer.borderColor = UIColor.whiteColor().CGColor
cell.testImage.clipsToBounds = true
cell.placeholderLoading.stopAnimating()
})

return cell
}


func imageSwiped(recognizer: UISwipeGestureRecognizer) {
let testData: NSDictionary = self.tableData[recognizer.view.tag] as NSDictionary
let imageSlide = recognizer.view as UIImageView

var imageURL = testData["image"] as String
ImageLoader.sharedLoader.imageForUrl(imageURL, completionHandler:{(image: UIImage?, url: String) in
UIView.transitionWithView(imageSlide,
duration:0.44,
options: .TransitionCrossDissolve,
animations: { imageSlide.image = image },
completion: nil)
})

let indexPath = self.indexPathArray[recognizer.view.tag] as NSIndexPath
let cell = self.tableView?.cellForRowAtIndexPath(indexPath)as customCell
cell.testLabel.text = "Test"
}

最佳答案

UITableView遵循模型- View - Controller 模式。根据此模式,您需要对模型进行所有更改 - 换句话说,对存储用于填充单元格数据的信息的数据结构进行更改。对模型进行更改后,您告诉 View 数据已更改,然后 View 将显示新数据。

假设您的 cellForRowAtIndexPath函数从数组中读取。你的imageSwiped然后函数应找到已被刷过的项目,修改其在数组中的条目,并调用 reloadDatareloadRowsAtIndexPaths .

就是这样!一旦您通知 TableView 重新加载,它将返回到数组,找到修改后的数据,并调用您的 cellForRowAtIndexPath。显示它。

具体来说,在您的代码中添加一个名为 swipedCells 的数组到您声明 tableData 的同一个类(class)数组:

var swipedCells = Boolean[](count:self.tableData.count, repeatedValue: false)

现在替换

cell.testLabel.text = "Test Label"

符合

if self.swipedCells[indexPath.row] {
cell.testLabel.text = "Swiped!"
} else {
cell.testLabel.text = "Test Label"
}

最后,更改imageSwiped如下:

let indexPathRow = self.indexPathArray[recognizer.view.tag] as Int
self.swipedCells[indexPathRow] = true
self.tableView?.reloadData()

这样,您滑动的单元格将继续具有标签 "Swiped!"即使在你滚动之后。

关于ios - 在 TableView 范围之外更改元素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25202160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com