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的viewDidLoad
或viewWillAppear
中的任何东西。
segue.destinationViewController
是要呈现的视图控制器。 任何与此混淆的东西都是在寻求麻烦。
滞后时间的增加很可能是由于closeview
的动作(不作为,而不是),这只是删除popup视图控制器的视图,使视图控制器本身无限期。 该方法中的适当操作是调用:
[self dismissViewControllerAnimated:YES completion:nil];
另外,请注意,任何你直接分配一个表格视图单元格的地方(在OP代码中执行过两次),都至less表示一个误解,可能是一个错误。