Как правильно представить легкую сдобу от UITableViewCell с UIPopoverArrowDirectionRight или UIPopoverArrowDirectionLeft

Я всегда пытаюсь представить легкую сдобу от ячейки в tableView этот путь:

[myPopover presentPopoverFromRect:cell.frame inView:self.tableView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

но я не могу использовать UIPopoverArrowDirectionRight или Левый, потому что, в зависимости от положения iPad (портрет или среда), легкая сдоба еще появляется где-нибудь.

Я представляю легкую сдобу правильный путь?

PS: табличное представление находится в detailView splitView.

32
задан Shmidt 16 December 2014 в 17:09
поделиться

2 ответа

Рамка ячейки будет что-то вроде 0,0,width,size, я не верю, что она будет иметь свои X и Y относительно tableView... вы хотите использовать - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath для этого, это должно вернуть вам правильную рамку для ячейки относительно tableView...вот ссылка UITAbleView ref

2
ответ дан 27 November 2019 в 19:53
поделиться

У меня была такая же проблема, вот обходной путь, который я использовал:

  • в моем UITableViewCell я добавил Действия (IBActions, поскольку я генерирую свои ячейки из NIB) для кнопок конкретных ячеек.
  • Затем я определил протокол CellActionDelegate, который имитирует мои селекторы действий, к которым у меня была моя кнопка (отправитель) и моя ячейка (я)
  • , затем detailViewController моего splitViewController реализует этот протокол, конвертируя из ячейки в ее координаты ...

вот пример кода

в MyCustomTableViewCell.m:

   -(IBAction)displaySomeCellRelativePopover:(id)sender{
        //passes the actions to its delegate
        UIButton *button = (UIButton *)sender;
        [cellActionDelegate displaySomeCellRelativePopoverWithInformation:self.info
                                                               fromButton:button 
                                                                 fromCell:self];   
   }

и в MyDetailViewController.m:

-(void)displaySomeCellRelativePopoverWithInformation:(MyCellInformationClass *)info
                                          fromButton:(UIButton *)button 
                                            fromCell:(UIView *)cell{

UIPopoverController * popoverController = nil;

//create your own UIPopoverController the way you want

//Convert your button/view frame

CGRect buttonFrameInDetailView = [self.view convertRect:button.frame fromView:cell];

//present the popoverController
[popoverController presentPopoverFromRect:buttonFrameInDetailView
                               inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];]


//release objects created...
}

PS: Конечно, «действие» не обязательно должно быть IBAction , и фрейм, из которого происходит всплывающее окно, не обязательно должен быть UIButton - подойдет один UIView :)

2
ответ дан 27 November 2019 в 19:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: