2015-12-03 6 views
0

Я пытаюсь добавить подпрограмму UIButton в UITableViewCell и наложить ее на ячейку ниже. В частности, я хочу, чтобы моя реализация выглядела как Edit Contact view в iOS Contacts, с фотографией контакта (кнопка) слева, а первое и последнее имя - справа.UITableViewCell - не может получить подзаголовок UIButton для перекрытия (и быть подданным) следующей ячейки в iOS 9

Это работало в iOS 7, и я уверен, что он также работал в iOS 8. Я пробовал буквально все, что я могу придумать, чтобы заставить его работать в iOS 9. Я могу заставить кнопку накладываться на следующая ячейка, но она не поддается обсуждению. Независимо от того, что, когда я нажимаю на нижнюю половину кнопки (половина, которая находится в части перекрытия второй ячейки), кнопка не распознается (ничего не происходит). Вот все, что я пробовал, безуспешно.

Когда я создал Tableview я поставил

tableView.clipsToBounds = NO; 

И

- (void)tableView:(UITableView *)tableView1 willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 

    switch (indexPath.section) { 
     case CONTACT_EDIT_SECTION: { 
      switch (indexPath.row) { 
       case NAME_FIRST_ROW: case NAME_LAST_ROW: 
        [cell setClipsToBounds:NO]; 
        [cell.contentView setClipsToBounds:NO]; 
        [cell.contentView.superview setClipsToBounds:NO]; 
        [cell.contentView.superview.superview setClipsToBounds:NO]; 
       } 
        break; 
      } 
     } 
      break; 
    } 
} 

Я читал, что когда Tableview находится в режиме редактирования ячейки получить набор обратно cell.contentView.clipsToBounds = YES , Так

- (void)setEditing:(BOOL)editing { 

    [super setEditing:editing]; 
    UITableView *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:NAME_FIRST_ROW inSection:CONTACT_EDIT_SECTION]]; 
    cell.contentView.clipsToBounds = NO; 

    UITableView *cell2 = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:NAME_LAST_ROW inSection:CONTACT_EDIT_SECTION]]; 
    cell2.contentView.clipsToBounds = NO; 
} 

Очевидно, что я попытался установить clipsToBounds Нет в методе cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView1 cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    __ENTERING_METHOD__ 
    switch (indexPath.section) { 
     case CONTACT_EDIT_SECTION: { 
      switch (indexPath.row) { 
       case NAME_FIRST_ROW: case NAME_LAST_ROW: { 
        UITableViewCell *cell; 
        if (indexPath.row == 0) { 
         cell = [tableView1 dequeueReusableCellWithIdentifier:@"Value1Cell" forIndexPath:indexPath]; 
         UIButton *imageButton = [[UIButton alloc] initWithFrame:CGRectMake(LEFT_CELL_MARGIN, (2*DEFAULT_ROW_HEIGHT-IMAGE_DIAMETER)/2.0, IMAGE_DIAMETER, IMAGE_DIAMETER)]; 
         [imageButton setBackgroundColor:[UIColor redColor]]; 
         //[imageButton.layer setMasksToBounds:YES]; 
         [imageButton.layer setCornerRadius:IMAGE_DIAMETER/2.0]; 
         [imageButton.layer setBorderWidth:1]; 
         [imageButton.layer setBorderColor:[UIColor colorWithRed:200 green:200 blue:200 alpha:1].CGColor]; 
         [imageButton setImage:_person.thumbnailImage forState:UIControlStateNormal]; 
         [imageButton addTarget:self action:@selector(photoActionSheet:) forControlEvents:UIControlEventTouchUpInside]; 
         [cell.contentView.superview addSubview:imageButton]; 

         [cell setClipsToBounds:NO]; 
         [cell.contentView setClipsToBounds:NO]; 
         [cell.contentView.superview setClipsToBounds:NO]; 
         [cell.contentView.superview.superview setClipsToBounds:NO]; 

        } 
        else { 
         cell = [tableView1 dequeueReusableCellWithIdentifier:@"Value1Cell" forIndexPath:indexPath]; 

         [cell setClipsToBounds:NO]; 
         [cell.contentView setClipsToBounds:NO]; 
         [cell.contentView.superview setClipsToBounds:NO]; 
         [cell.contentView.superview.superview setClipsToBounds:NO]; 
        } 
        [cell layoutIfNeeded]; 
        return cell; 
       } 
        break; 
      } 
     } 
      break; 
    } 
    return nil; 
} 

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

ответ

2

Вам необходимо создать ячейку с несколькими текстовыми полями и портретным изображением. Перекрытие из внешней ячейки очень четкое, поскольку порядок просмотра может быть изменен пользователем, прокручивая ячейки в и из.

Это можно подтвердить в приложении для контактов, когда вы выбираете ячейку номера телефона или что-то ниже, она выделяет ячейку, однако при нажатии на ячейки первой/последней/компании она не делает подсветки. Это потому, что это некоторая ячейка сама по себе.

+0

Я знаю, что смогу это сделать. Я просто хотел этого избежать. Итак, что я описал выше, просто технически невозможно? – SAHM

+0

Даже если вам удастся заставить его «работать» в iOS 9, нет гарантии, что он не сломает дорогу в -say-iOS 10 (iOS X?). Лучше избегайте быстрых и грязных хаков и внедряйте дизайн, который является семантическим с точки зрения предполагаемого использования классов UIKit. Он будет окупиться как меньше головных болей. –

+0

Хорошо. Тогда это отвечает на вопрос. Спасибо. – SAHM