UITableViewcell中的Popover不会立即生效。

我有一个dynamic的tableviewcontroller SideBarTableViewController.m / .h。
有一个popup视图控制器 – popUpViewController.m / .h已经子类化的SideBarTableViewController – > RegisterTableViewCell.m / .h单元格,并添加一个单元格的buttonsockets。 在storyboard中使用“present As popover”连接单元格到popUpViewController,segue被赋予标识符“popover”。 故事板中的定位点现在已设置为Tableview,稍后将在preparesegue中进行更改。

RegisterTableViewCell.h

@property (weak, nonatomic) IBOutlet UIButton *PopoverAnchorButton; 

SideBarTableViewController.m

 #import "RegisterTableViewCell.h" (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([segue.identifier isEqualToString:@"popover"] && segue.destinationViewController.popoverPresentationController){ UIPopoverPresentationController *popController = segue.destinationViewController.popoverPresentationController; popController.sourceView = sender; RegisterTableViewCell *cell = [[RegisterTableViewCell alloc]init]; segue.destinationViewController.popoverPresentationController.sourceRect = CGRectMake(cell.PopoverAnchorButton.frame.size.width/2, cell.PopoverAnchorButton.frame.size.height, 0, 0); popController.delegate = self; } } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *cellIdentifier = [menuItems objectAtIndex:indexPath.row]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; RegisterTableViewCell *regcell = [[RegisterTableViewCell alloc]init]; [regcell.PopoverAnchorButton addTarget:self action:@selector(PresentPopover:) forControlEvents:UIControlEventTouchUpInside]; // Configure the cell... return cell; } -(void) PresentPopover:(UIButton *)sender { NSLog(@"present popover called "); [self performSegueWithIdentifier:@"popover" sender:sender]; } 

popUpViewController.m

 - (IBAction)closeview:(id)sender { [self.view removeFromSuperview]; } 

问题:

popup窗口显示在单元格的左端,但是我看到popup窗口会有延迟。 通常情况下,首先点击单元格,按预期popup窗口,
第二次点击 – >小小的延迟,
第三 – >多一点延迟…(延迟不是总是增加,但固定6-7秒)

让ipad空闲6秒钟,然后再点击单元格,popup显示立即。

在单元格中双击(2个水龙头)会立即显示,但会显示警告:

 2016-07-11 22:53:05.462 Player-app_03[1947:590814] Warning: Attempt to present <UINavigationController: 0x125026400> on <SideBarTableViewController: 0x124d258f0> which is already presenting (null) 

这里发生了什么? 我无能为力 任何人请帮助。

这个问题很可能发生在segue.destinationViewController的操作中,它从OP代码中看起来本身可以处理另一个视图控制器。 为了解决这个问题,省略你有的prepareForSegue逻辑,并且忽略与vc展现有关的目标vc的viewDidLoadviewWillAppear中的任何东西。

segue.destinationViewController是要呈现的视图控制器。 任何与此混淆的东西都是在寻求麻烦。

滞后时间的增加很可能是由于closeview的动作(不作为,而不是),这只是删除popup视图控制器的视图,使视图控制器本身无限期。 该方法中的适当操作是调用:

 [self dismissViewControllerAnimated:YES completion:nil]; 

另外,请注意,任何你直接分配一个表格视图单元格的地方(在OP代码中执行过两次),都至less表示一个误解,可能是一个错误。