我有一个从按钮出现的弹出窗口,里面有一个表视图控制器和表视图。我为表视图创建了一个单独的数据源。一切都挂在故事板上:
我在应用程序的主视图控制器中保留对表视图控制器的引用(在弹出窗口解除后执行工作)。我想在popover中的表视图中保留选择。这是我在主视图控制器中的-prepareForSegue:sender:方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"Popover"]) {
UIStoryboardPopoverSegue *popover = (UIStoryboardPopoverSegue *)segue;
popover.popoverController.delegate = self;
popover.popoverController.contentViewController = (AJFTableViewController *)self.filterTableViewController;
}
}
我的问题是这样的:当我将popover的contentViewController分配给应用程序的主视图控制器引用的表视图控制器时(上面方法的最后一行),没有数据出现在表视图。我已经确认正在创建数据源,甚至尝试在该方法结束时在tableView上手动调用reloadData,但仍然没有出现。
如果我注释掉最后一行(将popover contentViewController分配给表视图控制器属性),我会在表视图中看到数据。但是,每次出现弹出窗口时都会创建一个新的表视图控制器,这不是我想要的。
如何正确地将popover的contentViewController分配给我在应用程序主视图控制器中保持的表视图控制器,以便在弹出窗口出现时显示数据? / p>
答案 0 :(得分:0)
您将无法使用segue执行此操作,因为segues始终实例化新控制器。如果要重用内容控制器的相同实例,则需要在代码中显示它,
@interface ViewController ()
@property (strong,nonatomic) AJFTableViewController *filterTableViewController;
@property (strong,nonatomic) UIPopoverController *popController;
@end
@implementation ViewController
- (IBAction)showPopover:(UIButton *)sender {
if (! self.filterTableViewController) {
self.filterTableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Table"];
}
self.popController = [[UIPopoverController alloc] initWithContentViewController:self.filterTableViewController];
self.popController.delegate = self;
[self.popController presentPopoverFromRect:sender.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
}