Изменение изображения для кнопки раскрытия деталей (Xcode 4.2) - PullRequest
5 голосов
/ 17 октября 2011

Я использовал следующую предложенную процедуру для изменения изображения кнопки раскрытия подробностей в ячейке табличного представления (в tableView cellForRowAtIndexPath)

if (cell == nil) {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];

    UIButton *myAccessoryButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
    [myAccessoryButton setBackgroundColor:[UIColor clearColor]];
    [myAccessoryButton setImage:[UIImage imageNamed:@"ball"] forState:UIControlStateNormal];
    [cell setAccessoryView:myAccessoryButton];
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
}

Однако событие tableView accessoryButtonTappedForRowWithIndexPath больше не вызывается при нажатиикнопка.

Кто-нибудь есть идеи, почему?

1 Ответ

6 голосов
/ 27 декабря 2012

У меня +1 ответ Фрая, но я просто извлекаю код с другого сайта, чтобы сделать SO более полным: Ответ в том, что вам нужно accessoryButtonTapped .... вызов не будет сделан автоматически, так какдля встроенной детализации-раскрытия, поэтому вы должны сделать это сами с целью кнопки.

Переводя код ссылки на ваш пример выше, добавьте эту строку после setImage:

[myAccessoryButton addTarget:self action:@selector(accessoryButtonTapped:event:)  forControlEvents:UIControlEventTouchUpInside];

Затем добавьте это позже:

- (void)accessoryButtonTapped:(id)sender event:(id)event
{
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
    if (indexPath != nil) {
        [self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
    }
} 

(дословно скопировано с эта ссылка )

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

Объяснение: accessoryButtonTapped - это метод пользовательской цели для нашей пользовательской кнопки.Когда кнопка нажата («TouchUpInside»), мы находим indexPath ячейки в точке, в которой произошло нажатие, и вызываем метод, который обычно вызывается табличным представлением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...