在uitableview中编辑特定的单元格

时间:2019-03-11 06:09:59

标签: ios swift uitableview

enter image description here

我有一个表格视图单元格,其中正在使用操作表来更改应用程序的语言。动作发生后,我想更改显示的语言标题。如何访问该单元?我可以使用下标来调用和编辑该单元格的按钮标题吗?

 let actionSheet = UIAlertController(title:NSLocalizedString("Message", comment: "Message"), message:"", preferredStyle:.actionSheet)
    //
    actionSheet.addAction(UIAlertAction(title:"English", style:.default, handler: { (action) in
        Bundle.setLanguage("en")
                                        self.navigationController?.dismiss(animated:true, completion:nil)
        self.languageSelected.text = "English"
        self.cell.notificationButton.setTitle("English" , for: .normal )
        self.lang = 0
        self.langChange()
 ////////////////////////////////////////////////
   func langChange() {
if lang == 0 {
cell.notificationButton.setTitle("English" , for: .normal )}
if lang == 1 {
cell.notificationButton.setTitle("Hindi" , for: .normal )}
if lang == 2 {
cell.notificationButton.setTitle("Tamil" , for: .normal )}
if lang == 3 {
cell.notificationButton.setTitle("Telugu" , for: .normal )}
}



   ////////////////////////////////////////

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! AppSettingViewCell
    cell.selectionStyle = .none
    cell.leftText.text = menuArray[indexPath.row]
    cell.isUserInteractionEnabled = true

    if lang == 0 {
        cell.notificationButton.setTitle("English" , for: .normal )}
    if lang == 1 {
        cell.notificationButton.setTitle("Hindi" , for: .normal )}
    if lang == 2 {
        cell.notificationButton.setTitle("Tamil" , for: .normal )}
    if lang == 3 {
        cell.notificationButton.setTitle("Telugu" , for: .normal )}
    if indexPath.row == 0 {
        cell.notificationButton = UIButton()
        cell.languageLabel = UILabel()
        cell.addSubview(cell.notificationButton)
        cell.addSubview(cell.languageLabel)
        languageSelected.textColor = appGreenTheme
         cell.languageLabel.text = languageSelected.text
        cell.languageLabel.textColor = appGreenTheme
        cell.languageLabel.isHidden = true
        cell.notificationButton.setTitleColor(appGreenTheme, for: .normal)
        cell.notificationButton.isHidden = false

.. 我尝试了很多技术来更改它,但是第一个单元格的标题没有改变。任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

在您的特定情况下,因为您的更改不需要更改单元格布局(通过布局更改,我的意思是不涉及更改单元格的高度计算),您可以使用以下

....
self.languageSelected.text = "English"
self.cell.notificationButton.setTitle("English" , for: .normal )
self.lang = 0
self.langChange()

let cell = YOUR_TABLEVIEW_REF.cellForRow(at: IndexPath(row: YOUR_ROW_FOR_LANGUAGE_CELL, section: YOUR_SECTION_FOR_LANGUAGE_CELL)) as! AppSettingViewCell

// REST OF YOUR LOGIC TO CHANGE THE CELL CONTENT BASED ON YOUR IMPLEMENTATION.

cellForRow(at indexPath: IndexPath)将获取当前在给定indexPath中显示的单元格。当您轻触单元格并显示操作单时,很明显,单元格当前正在渲染。调用cellForRow(at indexPath: IndexPath)将返回该单元格。

Appledoc

答案 1 :(得分:0)

似乎您正在将UITableViewCell保存在封闭的类中,并试图通过该引用对其进行修改。我不确定这是否行得通,但是我知道这不是更改单元格的推荐方法。

相反,应该像已经尝试做的那样在cellForRowAt()函数中更改语言。缺少的是,当调用langChange()时,该函数只需要知道您的UITableView并调用reloadData()

func langChange() {
    tableView.reloadData()
}

为什么行得通?

reloadData()强制该表重新加载其所有单元格,因为它认为该表所基于的数据集已更改。此时,将为每个当前显示的单元格再次调用cellForRowAt()。现在,您可以在cellForRowAt()内部检查选择了哪种语言,并根据语言设置单元格的标题。

答案 2 :(得分:0)

据我了解,您想更改在指定单元格中更改语言后将在操作表中显示的标题,对吗? 如果是这样,请尝试使用委托

示例:在您的单元格类中,创建一个函数或@IBAction以在主视图中打开其操作表,并将其单元格作为参数传递,当主视图收到其参数(单元格)时,使用 tableView .indexPath (用于:参数的单元格),它将为您提供打开其操作表并通过其更改标题的单元格的特定indexPath