Подтвердить что ты не робот

Могу ли я использовать метод viewDidLoad в UITableviewCell?

Могу ли я использовать метод viewDidLoad в UITableviewCell?

4b9b3361

Ответ 1

Нет, вы не записываете viewDidLoad в подклассу класса пользовательских ячеек UITableViewCell (это часть UIViewController). У вас есть метод под названием

-(void)layoutSubviews
{
    [super layoutSubviews];
}

где вы можете определить кадры и все для пользовательских элементов управления ячейками. Refer ссылка Apple UITableviewCell

Обратите внимание, однако, что 'viewDidLoad' называется только один раз в течение всего жизненного цикла объекта; он скорее похож на инициализатор в общем программировании OO. Однако "layoutSubviews" будет вызываться много раз в каждой ячейке (в зависимости от таких проблем, как прокрутка и т.д.). Важно понимать, что для этого резонанса многие вещи, которые вы обычно делаете в viewDidLoad, вы не можете делать в layoutSubviews.

Обратите внимание, что viewDidLoad вызывается только один раз: layoutSubviews вызывается часто.

Это будет просто простая функция, если вы ее напишете.

Учебник для пользовательской ячейки

Ответ 2

Лучше позвонить super.layoutSubviews(). Синтаксис Swift:

override func layoutSubviews() {
    super.layoutSubviews()
}

Ответ 3

Если вы пытаетесь инициализировать некоторые IBOutlets вашего UITableViewCell, вам может понадобиться вызов awakeFromNib():

override func awakeFromNib() {
    super.awakeFromNib()
    // Do your stuff
    // myIBOutlet.text = "Hello" 
}

Ответ 4

Функция UIKit viewDidLoad является членом UIViewController, а UITableViewCell не наследует ее. Вы можете написать метод с именем viewDidLoad, если хотите, но он не будет вызываться, как в подклассе UIViewController.

Ответ 5

ДА вы можете написать viewDidLoad в UITableViewCell, но viewDidLoad не является методом делегирования UITableViewCell, поэтому он не будет вызываться автоматически, поэтому вы должны называть его вручную [self viewDidLoad] для выполнения кода.

Ответ 6

вы можете использовать initWithFrame для UITableViewCell или UICollectionViewCell или для любого подкласса UIView.

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
       // Initialisation code here
    }
    return self;
}

Ответ 7

Я понимаю, что это старый поток, но шаблон, который я иногда использую (особенно, если у меня есть базовый класс для моих пользовательских ячеек):

  • Добавьте свойство BOOL, назовите его что-то вроде "cellAlreadyDidLoad". Я назвал это так, потому что BOOL по умолчанию будет НЕТ, поэтому мне не нужно беспокоиться об установке его в методе init.

  • Создайте метод cellDidLoad, названный так с намерением, чтобы он вроде как viewDidLoad, который все мы знаем и любим.

  • Отмените метод layoutSubviews и добавьте:

    if (!self.cellAlreadyDidLoad)
    {
        [self cellDidLoad];
        self.cellAlreadyDidLoad = YES;
    }
    

Теперь у вас есть метод cellDidLoad, который будет вызываться только один раз, зная, что элементы интерфейса (включая ваши IBOutlets) будут присутствовать. Очень похоже на viewDidLoad на контроллер вида.