- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.mode == EventsMode)
{
SWEvent *event = [self.eventsController.dataModel itemAtIndexPath:indexPath];
static NSString *CellIdentifier = @"actionCell";
SWActionCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
[cell formatForEvent:event];
@weakify(self);
@weakify(cell);
if (![cell.actionButton_1 bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
{
[cell.actionButton_1 bk_addEventHandler:^(id sender) {
@strongify(cell);
SWEvent *cellEvent = cell.event;
if (cellEvent.isLikedValue)
{
[[SWCore instance] unlikeEvent:cellEvent];
}
else
{
[[SWCore instance] likeEvent:cellEvent];
}
} forControlEvents:UIControlEventTouchUpInside];
}
if (![cell.actionButton_2 bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
{
[cell.actionButton_2 bk_addEventHandler:^(id sender) {
@strongify(self);
@strongify(cell);
SWEvent *cellEvent = cell.event;
self.presentController = [SWMediaController controllerWithEvent:cellEvent];
[self.presentController addPhotoInController:self];
} forControlEvents:UIControlEventTouchUpInside];
}
if (![cell.actionButton_3 bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
{
[cell.actionButton_3 bk_addEventHandler:^(id sender) {
@strongify(self);
@strongify(cell);
SWEvent *cellEvent = cell.event;
[self performSegueWithIdentifier:@"commentsSegue" sender:cellEvent];
} forControlEvents:UIControlEventTouchUpInside];
}
if (![cell.actionButton_4 bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
{
[cell.actionButton_4 bk_addEventHandler:^(id sender) {
@strongify(self);
@strongify(cell);
SWEvent *cellEvent = cell.event;
self.presentController = [SWMediaController controllerWithEvent:cellEvent];
[self.presentController openPhotoBrowserInNavigationController:self.navigationController];
} forControlEvents:UIControlEventTouchUpInside];
}
if (![cell.nextButton bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
{
[cell.nextButton bk_addEventHandler:^(id sender) {
@strongify(self);
@strongify(cell);
SWEvent *cellEvent = cell.event;
[self performSegueWithIdentifier:@"eventControllerSegue" sender:cellEvent];
} forControlEvents:UIControlEventTouchUpInside];
}
return cell;
}
Найдено в одном чужих из проектов. Призываем экспертов по говнокоду чтобы прокомментировать неочевидные решения автора и пролить свет на тайну этого метода
Gerchicov-bp 07.04.2015 09:59 # +1
В целом бредово выглядит пихать в cellForRowAtIndexPath: установку обработчиков кнопок. Я бы по нажатию на кнопку выцеплял информацию о cell и производил бы действия в зависимости от его типа/индекса. Обработчик нажатия на кнопку видимо лучше оставить внутри view controller
gumbert 07.04.2015 20:24 # −2