关闭块不会在第二次 swift3 上重新加载表
Posted
技术标签:
【中文标题】关闭块不会在第二次 swift3 上重新加载表【英文标题】:Closure block not reloading table on second time swift3 【发布时间】:2017-04-27 15:24:35 【问题描述】:我有一个带有按钮和标签的表格。当我点击按钮时,它会突出显示。所以我有 5 行,每行带有按钮和标签,当我点击每个按钮时,它们都会突出显示。现在除了表格 I 之外的剩余视图当我点击它时有取消按钮我希望重新加载所有选定的行。我的代码在第一次执行时工作正常。就像我选择了所有 5 个按钮然后点击取消按钮所有行都被重新加载。但是当我在表中选择按钮时再次行并点击取消没有任何反应。调用正在我的关闭函数中进行,我可以看到打印的正确索引用于重新加载但没有任何反应。我的代码是这样的-:
Cell 自定义类-:
import UIKit
class TestingControllerCellTableViewCell: UITableViewCell
@IBOutlet weak var TableButton: UIButton!
@IBOutlet weak var TableMenu: UILabel!
var TableButtonCallBack : (()->())?
override func awakeFromNib()
super.awakeFromNib()
ButtonLayout()
// Initialization code
func ButtonLayout()
TableButton.layer.cornerRadius = 12.5
TableButton.layer.borderWidth = 1.0
TableButton.layer.borderColor = UIColor.gray.cgColor
self.selectionStyle = UITableViewCellSelectionStyle.none
@IBAction func filterTableRadioButtonAction(_ sender: UIButton)
TableButtonCallBack?()
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
控制器类-:
import UIKit
class filterControllerViewController: UIViewController
@IBOutlet weak var TableViewController: UITableView!
fileprivate var ButtonSelectedIndex = [[Int]]()
fileprivate var cancelDataItemSelectedCallBack : ((Int)->())? = nil
override func viewDidLoad()
super.viewDidLoad()
filterTableViewSetUp()
// Do any additional setup after loading the view.
// CANCEL ACTION
@IBAction func cancelDataItemSelected(_ sender: UIButton)
for sectionIndex in 0..<filterRadioButtonSelectedIndex.count
for valueIndex in 0..<ButtonSelectedIndex[sectionIndex].count
cancelDataItemSelectedCallBack!(ButtonSelectedIndex[sectionIndex][valueIndex])
ButtonSelectedIndex.removeAll()
func TableViewSetUp()
TableViewController.delegate = self
TableViewController.dataSource = self
TableViewController.backgroundColor = UIColor.green
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
extension filterControllerViewController:UITableViewDataSource,UITableViewDelegate
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return data.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let filterCell = tableView.dequeueReusableCell(withIdentifier: "filterCell", for: indexPath) as! FilterControllerCellTableViewCell
filterCell.filterTableRadioButtonCallBack =
filterCell.TableButton.backgroundColor = UIColor.blue
self.ButtonSelectedIndex.append([indexPath.row])
// THIS cancelDataItemSelectedCallBack CALLED FIRST TIME AND RELOAD TABLE EVEN GETS CALLED SECOND TIME SHOWS CORRECT INDEX BUT TABLE BUTTONS STLL REMAIN HIGHLIGHTED
self.cancelDataItemSelectedCallBack = data in
let indexPath = IndexPath(item: data, section: indexPath.section)
print(indexPath)
self.TableViewController.reloadRows(at: [indexPath], with: UITableViewRowAnimation.none)
return filterCell
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 40.0
我知道我遗漏了一些东西,但没有得到它。请帮助
print indexPath inside self.cancelDataItemSelectedCallBack 给了我这个正确的输出。但它只能工作一次。
[0, 2]
[0, 3]
【问题讨论】:
【参考方案1】:您必须像这样在主线程上重新加载 UI:
self.cancelDataItemSelectedCallBack = data in
OperationQueue.main.addOperation
let indexPath = IndexPath(item: data, section: indexPath.section)
self.TableViewController.reloadRows(at: [indexPath], with: UITableViewRowAnimation.none)
【讨论】:
以上是关于关闭块不会在第二次 swift3 上重新加载表的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4:UITableViewCell 在初始加载时不会显示数据,但会在第二次加载时加载
进行第二次 Json 调用 Swift 3 后如何在 UITableview 中重新加载数据
REACT - defaultChecked 在第二次加载时不呈现检查属性
自定义 tableviewcell 上的 UISlider 和 UILabel 在第二次播放音频之前不会使用 avaudioplayer 更新