Я устанавливаю две кнопки внутри 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 не делали до меня здесь, я не думаю, что.