UITableViewcell中的Popover不会立即出现。

时间:2016-06-06 17:34:11

标签: ios objective-c uitableview uipopovercontroller

我有一个动态tableviewcontroller SideBarTableViewController.m / .h。
有一个弹出视图控制器 - popUpViewController.m / .h 已经子类化了SideBarTableViewController的单元格 - > RegisterTableViewCell.m / .h并从单元格添加了一个按钮出口。 使用" present作为popover"将单元格连接到故事板中的popUpViewController。 segue和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];

}

问题:

弹出窗口从单元格的左端显示,但是我看到,弹出式演示文稿有延迟。通常,首先单击单元格,弹出按预期出现,
第二次点击 - >小延迟,
 第三 - >更多延迟......(延迟并不总是增加,但固定6-7秒)

让ipad闲置6秒钟,然后再次点击单元格,立即显示弹出窗口。

在单元格中双击(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)

这里发生了什么?我很无能为力。有人请帮忙。

1 个答案:

答案 0 :(得分:1)

问题可能出现在segue.destinationViewController的操作中,这些操作从OP代码出现,可以处理另一个视图控制器。要解决此问题,请省略您拥有的prepareForSegue逻辑,并省略目标vc的viewDidLoadviewWillAppear中与vc演示相关的任何内容。

segue.destinationViewController是将要呈现的视图控制器。任何与之混淆的事情都是在寻找麻烦。

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

[self dismissViewControllerAnimated:YES completion:nil];

另外,请注意,您直接分配表格视图单元格(在OP代码中完成两次)的任何地方至少表示存在误解,可能是错误。