Я хочу изменить значение UILabel
, когда кто-то на него нажимает.Доступ к общедоступной переменной в подклассе uitableviewcell
Значения, к которым я хочу изменить его, определены в самом ViewController
.
Сейчас я работаю с этим кодом:
- (void)tapOnBalance {
TimelineViewController *timelineVC = [[TimelineViewController alloc]init];
if(timelineVC.oldBalance && timelineVC.newBalance){
NSTimeInterval duration = 0.5f;
[UIView transitionWithView:self.amountLabel
duration:duration
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.amountLabel.text = timelineVC.newBalance;
} completion:^(BOOL finished){
[UIView animateWithDuration:duration delay:duration options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
self.amountLabel.text = timelineVC.oldBalance;
} completion:^(BOOL finished){
NSLog(@"finished");
}];
}];
}
}
Однако, потому что я, вероятно, инициализацией TimelineViewController
как новый insance, все начальные значения равны нулю, поэтому кодоблок внутри if/else
утверждение никогда не запускается.
Как получить доступ к этим общедоступным значениям без создания нового экземпляра TimelineViewController
?
Действительно плохая идея. Ячейка не должна знать никаких контроллеров. Класс вашей ячейки должен определять протокол и иметь свойство делегата. Тогда ваш контроллер просмотра может быть делегатом ячейки. Затем ячейка может попросить своего делегата предоставить обновленное значение, когда это необходимо. Это позволяет вашей ячейке работать без каких-либо конкретных знаний о том, откуда она получает свои данные. – rmaddy
@rmaddy кажется законным, но для этой же задачи гораздо больше работы. Какое зло я могу вызвать, когда я это делаю? – bdv
Слишком много сцепления. Ваша ячейка требует слишком много знаний о конкретном контроллере представления и, что еще хуже, о том, как настроены данные. Что произойдет, если вам понадобится одна и та же ячейка таблицы во втором контроллере представления? Несомненно, теперь быстро и просто, чтобы ячейка напрямую обращалась к данным с определенного контроллера представлений, но в долгосрочной перспективе вы пожалеете об этом. Ваш код потребует больше работы позже, когда все изменится. Плюс, он идет полностью против хорошего дизайна MVC. – rmaddy