我有一个表格视图单元格,其中正在使用操作表来更改应用程序的语言。动作发生后,我想更改显示的语言标题。如何访问该单元?我可以使用下标来调用和编辑该单元格的按钮标题吗?
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
.. 我尝试了很多技术来更改它,但是第一个单元格的标题没有改变。任何人都可以帮忙吗?
答案 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)
将返回该单元格。
答案 1 :(得分:0)
似乎您正在将UITableViewCell
保存在封闭的类中,并试图通过该引用对其进行修改。我不确定这是否行得通,但是我知道这不是更改单元格的推荐方法。
相反,应该像已经尝试做的那样在cellForRowAt()
函数中更改语言。缺少的是,当调用langChange()
时,该函数只需要知道您的UITableView
并调用reloadData()
:
func langChange() {
tableView.reloadData()
}
为什么行得通?
reloadData()
强制该表重新加载其所有单元格,因为它认为该表所基于的数据集已更改。此时,将为每个当前显示的单元格再次调用cellForRowAt()
。现在,您可以在cellForRowAt()
内部检查选择了哪种语言,并根据语言设置单元格的标题。
答案 2 :(得分:0)
据我了解,您想更改在指定单元格中更改语言后将在操作表中显示的标题,对吗? 如果是这样,请尝试使用委托。
示例:在您的单元格类中,创建一个函数或@IBAction以在主视图中打开其操作表,并将其单元格作为参数传递,当主视图收到其参数(单元格)时,使用 tableView .indexPath (用于:参数的单元格),它将为您提供打开其操作表并通过其更改标题的单元格的特定indexPath