Как уменьшить размер дефолтного ImageView в TableViewCell?

customtableviewcell
swift
tableview

#1

при использовании стандартного Image View в TableViewCell не получается изменить размер картинки. В сториборде этот Image View не виден, пытался достать обычным кодом.

cell?.imageView?.layer.frame.size.height = 50
cell?.imageView?.clipsToBounds = true

Но ничего не реагирует. Похоже, что этот дефолтный ImageView прописан в ячейке каким-то специальным образом, но как именно? Гугл пока не помогает. Понимаю, что можно сделать custom cell, но не хотелось бы из-за одной фичи делать отдельный класс.


#2

Лучше кастомный класс, меньше проблем будет, да и не так долго он делается.


#3

Вы правы, тоже к этому пришел после нескольких часов проб и ошибок.

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

Accessories использовать не могу, потому как оно зарезервировано для перехода на Detail экран.


#4

А конкретнее, какие трудности с кнопкой?


#5

как передать indexPath в кнопку, которая находится в custom классе?


#6

можно не передавать.
при нажатии на кнопку возвращать self от ячейки. в самом VC полученный self от ячейки использовать в методе tableView indexPath(for:Cell), который и вернет вам indexPath ячейки.


#7

а как передать этот self? можно какой-нибудь фрагмент кода для образца?


#8
protocol MyCellDelegate: class {
    func didTapButton(_ cell: MyCell)
}

class MyCell: UITableViewCell {
    weak var delegate: MyCellDelegate?

    @IBAction func didTapButton(_ sender: Any) {
        delegate?.didTapButton(self)
    }
}

#9

Спасибо! Пойду пробовать.


#10

увы, не сдюжил ваш код, не понимаю как он работает. Позвольте вас немного поспрашивать на эту тему. Предположим в проекте есть NewTVC и NewCustomCell классы. Отсюда, пример вашего кода получается следующим образом:

protocol NewCustomCellDelegate: NewTVC {
        func didTapButton(_ cell: NewCustomCell)
    }

class NewCustomCell: UITableViewCell {
    weak var delegate: NewCustomCellDelegate?

    @IBAction func didTapButton(_ sender: Any) {
        delegate?.didTapButton(self)
    }
}

Это всё в файле NewCustomCell класса.

Вопросы:

  1. Где записать само действие по нажатию кнопки? Например, просто print() для проверки. Там где функция объявляется, т.е. в NewCusromCell или в NewTVC?

  2. Где вызвать этот метод нажатия кнопки? Выше вы написали, что в методе tableView indexPath(for:Cell). Но ведь там этот метод будет применяться ко всем ячейкам, а нужно только к одной, т.е. в момент нажатия на кнопку в определенной строке. didSelectRowAt тоже не подходит, потому как нажатие идет на всю строку.

  3. Как передать параметры в этот метод при вызове и использовать self?