我有一个动态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秒)
在单元格中双击(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)
这里发生了什么?我很无能为力。有人请帮忙。
答案 0 :(得分:1)
问题可能出现在segue.destinationViewController
的操作中,这些操作从OP代码出现,可以处理另一个视图控制器。要解决此问题,请省略您拥有的prepareForSegue
逻辑,并省略目标vc的viewDidLoad
或viewWillAppear
中与vc演示相关的任何内容。
segue.destinationViewController
是将要呈现的视图控制器。任何与之混淆的事情都是在寻找麻烦。
增加滞后时间很可能是由closeview
中的动作(不作为,而不是)引起的,这只是移除弹出视图控制器的视图,使视图控制器本身无限期地离开。该方法中的适当操作是调用:
[self dismissViewControllerAnimated:YES completion:nil];
另外,请注意,您直接分配表格视图单元格(在OP代码中完成两次)的任何地方至少表示存在误解,可能是错误。