Редактировать определенную ячейку в uitableview - PullRequest
1 голос
/ 11 марта 2019

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 голосов
/ 11 марта 2019

Похоже, что вы сохраняете UITableViewCell во включающем классе и пытаетесь изменить его с помощью этой ссылки. Я не уверен, может ли это сработать, но я знаю, что это не рекомендуемый способ изменить вашу камеру.

Вместо этого вы должны изменить язык в функции cellForRowAt(), как вы уже пытались это сделать. Чего не хватает, так это то, что когда вызывается langChange(), функция просто должна знать ваш UITableView и вызывать reloadData():

func langChange() {
    tableView.reloadData()
}

Почему это работает?

reloadData() заставляет таблицу перезагружать все ее ячейки, поскольку считает, что набор данных, на котором она основана, изменился. В этот момент cellForRowAt() вызывается снова для каждой отображаемой в данный момент ячейки. Внутри cellForRowAt() вы теперь проверите, какой язык выбран, и установите название ячейки в соответствии с языком.

0 голосов
/ 11 марта 2019

Насколько я понимаю, вы хотите изменить заголовок, который будет отображаться в листе действий после изменения языка в указанной ячейке, верно?Если это так, попробуйте использовать делегат .

. Пример: В своем классе ячеек создайте функцию или действие @IBAction, чтобы открыть лист действий в главном представлении и передать его ячейку в качестве параметра,когда ваш главный просмотр получает свой параметр (ячейку), используйте tableView.indexPath (для: ячейка параметра), чтобы он дал вам конкретный indexPath ячейки, которая открыла свой лист действий, и через него выизменить название

0 голосов
/ 11 марта 2019

В вашем конкретном случае, так как ваше изменение не требует изменения макета ячейки (под изменением макета я имею в виду, что при изменении ячейки не производится вычисление высоты), вы можете использовать следующее

....
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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...