События внутри UITableViewCell не работают ниже значения y - PullRequest
3 голосов
/ 24 февраля 2012

У меня возникают проблемы с тем, чтобы мои кнопки работали ниже определенного значения y в ячейках таблицы. Я использую пользовательский класс UITableViewCell с именем "RowWhiskyContent". Высота по умолчанию составляет 44 пикселя, и ниже этой точки мои события, похоже, больше не срабатывают. Кнопка отображается очень хорошо, как и все остальное ниже этой точки, однако событие, похоже, не срабатывает. Если я помещу свою кнопку наполовину (как при y = 35), только верхняя часть кнопки вызывает событие, а нижняя часть ничего не делает.

Вот код, сокращенный до основных:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell  *cell = nil;

    if(![self createView:&cell])
    {
        UIImage *bottle = [UIImage imageNamed:@"icon_add.png"]; //image size: 22x22
        UIButton *bottleButton = [[UIButton alloc] initWithFrame:CGRectMake(60, 70, bottle.size.width, bottle.size.height)]; 

        [bottleButton setImage:bottle forState:UIControlStateNormal];
        [cell.contentView addSubview:bottleButton];
        [bottleButton addTarget:self action:@selector(addToCollection:) forControlEvents:UIControlEventTouchUpInside];

        cell.contentView.frame = CGRectMake(cell.contentView.frame.origin.x, cell.contentView.frame.origin.y, cell.contentView.frame.size.width, 160);
        //cell.frame = cell.contentView.frame; // Tried this, didn't work.
        //[tableView reloadData]; // Tried this too, didn't work either.
    }
    return cell;
}

// Check if cell exists and create the cell if it doesn't.
-(BOOL) createView: (UITableViewCell**) cell
{
    BOOL cellExists = YES;
    *cell = (RowWhiskyContent *) [myTableView dequeueReusableCellWithIdentifier:@"ContentIdentifier"];    
    if(*cell == nil)
    {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"RowWhiskyContent" owner:self options:nil];
        *cell = [topLevelObjects objectAtIndex:0];
        cellExists = NO;
    }
    return cellExists;
}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    return 160;
}

Так как я устанавливаю высоту ячейки и contentView на 160, я не уверен, что здесь происходит неправильно. Перезагрузка данных не сработала, как и установка cell.frame.

Может кто-нибудь сказать мне, что я делаю не так? Заранее спасибо.

EDIT: Добавлен скриншот:

enter image description here

Красная кнопка работает нормально, но если поместить ее в положение зеленой кнопки, она перестает работать. Фон содержимого просмотра имеет фиолетовый цвет, что объясняет фиолетовую область. При нажатии на ячейку запускается didSelectRowAtIndexPath, поэтому я предполагаю, что сама ячейка также достаточно велика.

1 Ответ

3 голосов
/ 16 апреля 2012

Это определенно проблема размера контента.Ваша кнопка будет отображаться за пределами кадра, аналогично переполнению в CSS, однако они не будут реагировать на события.Итак, что бы UIView не содержал вашу UIButton, вам нужно убедиться, что его содержимое / фрейм / границы установлены достаточно высоко.Вы также можете использовать [cell.contentView sizeToFit], чтобы автоматически настроить его на его содержимое.

Вы определенно НЕ должны перезагружать данные внутри методов протокола для вашего UITableView.

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