我有一个动态的 tableviewcontroller SideBarTableViewController.m/.h 。
有一个弹出 View Controller - popUpViewController.m/.h
已将 SideBarTableViewController -> RegisterTableViewCell.m/.h 的单元格子类化,并从单元格向其添加按钮 socket 。
使用“present As popover”segue 将单元格连接到 Storyboard中的 popUpViewController,并且 segue 被赋予标识符“popover”。 storyboard 中的 anchor 目前已设置为 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)
这里发生了什么?我一无所知。任何人请帮助。
最佳答案
问题很可能出现在 segue.destinationViewController
的操作中,从 OP 代码来看,它本身似乎在处理另一个 View Controller 。要解决这个问题,请省略您拥有的 prepareForSegue
逻辑,并省略目标 vc 的 viewDidLoad
或 viewWillAppear
中与vc 演示文稿。
segue.destinationViewController
是将要显示的 View Controller 。任何与此相冲突的事情都是自找麻烦。
增加的滞后时间很可能是由 closeview
中的操作(而不是不操作)引起的,它只是删除弹出 View Controller 的 View ,无限期地留下 View Controller 本身。该方法中的正确操作是调用:
[self dismissViewControllerAnimated:YES completion:nil];
另外,请注意,您直接分配 TableView 单元格的任何地方(在 OP 代码中完成两次)至少表明存在误解,并且可能是错误。
关于ios - UITableViewcell 中的弹出窗口不会立即出现。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37663578/