Почему мои кнопки не идут? - PullRequest
3 голосов
/ 13 июля 2010

Я устанавливаю две кнопки внутри UITableViewCells.Сама ячейка никогда не должна реагировать на выделение, только мои две кнопки.

Вот код, о котором идет речь:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ident = @"ResourceResultsCells";

    ResourceResultsTableCell *cell = (ResourceResultsTableCell *)[tableView dequeueReusableCellWithIdentifier:ident];

    if (!cell) {
        NSArray *ary = [[NSBundle mainBundle] loadNibNamed:@"ResourceResultsTableCell" owner:nil options:nil];
        for (id thing in ary) {
            if ([thing isKindOfClass:[ResourceResultsTableCell class]]) {
                cell = (ResourceResultsTableCell *)thing;
            }
        }

    }

    NSDictionary *listing = [self.listings objectAtIndex:indexPath.row];

    cell.crewName.text = [listing objectForKey:@"ListingTitle"];
    cell.cityState.text = [NSString stringWithFormat:@"%@, %@",
                           [listing objectForKey:@"City"],
                           [listing objectForKey:@"State"]];
    cell.phone.text = [listing objectForKey:@"phone1"];
    cell.email.text = [self safeListingOf:@"Email" from:listing];

    UIImage *stretchy = [[UIImage imageNamed:@"grey_tab_stretchable.png"] stretchableImageWithLeftCapWidth:25 topCapHeight:0];
    [cell.callButton setBackgroundImage:stretchy forState:UIControlStateNormal];
    [cell.addToLightboxButton setBackgroundImage:stretchy forState:UIControlStateNormal];

    cell.callButton.tag = indexPath.row;
    cell.addToLightboxButton.tag = indexPath.row;

    //here's where my trouble is....
    [cell.callButton addTarget:self action:@selector(call:) forControlEvents:UIControlEventTouchUpInside];
    [cell.addToLightboxButton addTarget:self action:@selector(addToLightbox:) forControlEvents:UIControlEventTouchUpInside];

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    return cell;             
}

-(void)call:(id)sender
{
    UIButton *hit = (UIButton *)sender;
    NSLog(@"call with id %d", hit.tag);
}

-(void)addToLightbox:(id)sender
{
    UIButton *hit = (UIButton *)sender;
    NSLog(@"lightbox with id %d", hit.tag);
}

Буквально ВСЕ об этом прекрасно работает, за исключением того, что нажатие любой кнопки делаетНЕ приводит к тому, что мой NSLog указывает на то, что мы получили методы, на которые нацеливаемся.Также нет ошибок, просто нет сообщений.

Мои растягивающиеся изображения показывают, что мои IB-соединения в порядке, в кончике моей пользовательской ячейки таблицы.

Это похоже на то, что поверх них другой видпоэтому они не получают клик.Но они определенно являются последними вещами, добавленными к моему взгляду.В этом нет сомнений.

РЕДАКТИРОВАТЬ: ХАКИНГ ПРОДОЛЖАЕТСЯ !!

Я только что добавил следующий код в свой подкласс UITableViewCell:

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{   
    if ([touches count] == 1) {
        for (UITouch *theTap in touches) {
            if (theTap.tapCount == 1) {
                CGPoint coords = [theTap locationInView:self.contentView];

                CGRect callButtonFrame = self.callButton.frame;
                if (coords.x > callButtonFrame.origin.x && coords.x < (callButtonFrame.origin.x + callButtonFrame.size.width) 
                    && coords.y > callButtonFrame.origin.y && coords.y < (callButtonFrame.origin.y + callButtonFrame.size.height)) {
                    [self call:callButton];
                }

                CGRect boxButtonFrame = self.addToLightboxButton.frame;

                if (coords.x > boxButtonFrame.origin.x &&  coords.x < (boxButtonFrame.origin.x + boxButtonFrame.size.width)
                    && coords.y > boxButtonFrame.origin.y && coords.y < (boxButtonFrame.origin.y + boxButtonFrame.size.height)) {
                    [self addToLightbox:addToLightboxButton];
                }
            }
        }
    }
}

Довольно забавно, этоработает.Но это просто странно, что я должен переопределить код обнаружения контакта кнопки, как это.До сих пор не знаю, почему мои кнопки не получают нажатие.Я не очень доволен этим решением.Я думаю, что я готов пойти с ним в производство, если настоящая проблема не может быть найдена, но ... Я не прошу ничего, что сотня разработчиков iPhone не делали до меня здесь, я не думаю, что.

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Интересная проблема.Просто посмотрите, захватывает ли ячейка щелчки, и добавьте NSLog в ваш метод didselectrowatindexpath.

0 голосов
/ 13 июля 2010

Не знаю, поможет ли это много (я не на своем Mac), но не могли бы вы попробовать bringSubviewToFront для каждой кнопки, чтобы убедиться, что они находятся перед иерархией просмотра?

...