在弹出窗口中分配给contentViewController属性时,表视图控制器不显示数据

时间:2014-06-25 14:15:35

标签: ios storyboard

我有一个从按钮出现的弹出窗口,里面有一个表视图控制器和表视图。我为表视图创建了一个单独的数据源。一切都挂在故事板上:

Storyboard connections

我在应用程序的主视图控制器中保留对表视图控制器的引用(在弹出窗口解除后执行工作)。我想在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>

1 个答案:

答案 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];
}