Цвет TextLabel автоматически изменяется при прокрутке UiTableView - PullRequest
0 голосов
/ 11 октября 2018

Я меняю цвет текстовой метки на didSelectRowAt, но когда я прокручиваю UITableView, это также влияет на другие textlabel также

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
 let cell = tableView.cellForRow(at: indexPath) as! TableViewCell


    if (cell.LBLIntrest.textColor == (UIColor.black))
    {
         cell.LBLIntrest.textColor = Uicolor.blue
    } else {
          cell.LBLIntrest.textColor = Uicolor.black
    }
}

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Сначала необходимо создать свойство для хранения выбранной ячейки, как показано ниже

/* To hold selected cell */
var selectedIndexPath :IndexPath?

После этого установите цвет выбранной ячейки в cellForRowAt

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

    if let cell = tableView.dequeueReusableCell(withIdentifier: "cell") {
        cell.textLabel?.text = "Row Number: \(indexPath.row)"

        /* Check if cell is selected then set layout accourding to your requirements */
        if indexPath == selectedIndexPath {
            cell.textLabel?.textColor = .blue
        } else {
            cell.textLabel?.textColor = .black
        }
        return cell
    }

    return UITableViewCell()
}

После этогоуправлять, когда пользователь выбирает ячейку в didSelectRowAt

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // Toggle if user seleted same cell
    if selectedIndexPath == indexPath {
        if let cell = tableView.cellForRow(at: indexPath) {
            /* Check and toggle selected cell color */
            cell.textLabel?.textColor = cell.textLabel?.textColor == .black ? .blue : .black
        }
    } else {
        /* set color of seleted cell */
        if let cell = tableView.cellForRow(at: indexPath) {
            cell.textLabel?.textColor = .blue
        }
    }

    /* Save which cell is selected */
    selectedIndexPath = indexPath
}

И в прошлом управлять didDeselectRowAt

override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {

    /* Remove if deselect same cell */
    if selectedIndexPath == indexPath {
        selectedIndexPath = nil
    }
     /* Change color to black */
    if let cell = tableView.cellForRow(at: indexPath) {
        cell.textLabel?.textColor = .black
    }
}

Этот код предназначен для выбора ячейки водин раз, поэтому вам нужно установить

tableView.allowsMultipleSelection = false

Надеюсь, это поможет.

0 голосов
/ 11 октября 2018

Это должно сработать для вас.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = tableView.cellForRow(at: indexPath) as! TableViewCell
    setSelectedColor(cell: cell)
}

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

    if let selectedRows = tableView.indexPathsForSelectedRows, selectedRows.contains(indexPath) {
        setSelectedColor(cell: cell)
    }

    return cell
}


func setSelectedColor(cell: UITableViewCell) {
    if (cell.LBLIntrest.textColor == (UIColor.black)) {
        cell.LBLIntrest.textColor = Uicolor.blue
    } else {
        cell.LBLIntrest.textColor = Uicolor.black
    }    
}

Но я бы порекомендовал переместить это cell.LBLIntrest.textColor = Uicolor.blue в UITableViewCell в func setSelected(_ selected: Bool, animated: Bool) метод

class TableViewCell: UITableViewCell {
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // label textColor logic goes here
        // make use of selected
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...