ios - UITableViewcell 中的弹出窗口不会立即出现。

标签 ios objective-c uitableview uipopovercontroller

我有一个动态的 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 的 viewDidLoadviewWillAppear 中与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/

相关文章:

ios - 自定义 UITableViewCell 重用问题中的 UISwitch

ios - 我可以将静态库的发布和调试版本合并到一个二进制文件中吗?

ios - FMDB 排队 - 如何正确实现此模式?

iphone - 无法更改 UITableView 的高度

ios - 如何将 UITableView 上的分隔线放到特定部分?

ios - 将属性传递给另一个 View

ios - 将 iOS Swift 应用程序移植到 Xamarin 以进行 Windows 部署

ios - 列出已安装的移动配置文件

ios - 使用 Swift 3 的核心数据指南

iphone - Facebook Connect 发布对话框文本?