表视图控制器在弹出窗口中分配给 contentViewController 属性时不显示数据
Posted
技术标签:
【中文标题】表视图控制器在弹出窗口中分配给 contentViewController 属性时不显示数据【英文标题】:Table view controller not showing data when assigned to contentViewController property in popup 【发布时间】:2014-06-25 14:15:34 【问题描述】:我有一个从按钮出现的弹出框,里面有一个表格视图控制器和表格视图。我为表格视图创建了一个单独的数据源。故事板中的所有内容都已连接:
我在应用程序的主视图控制器中保留对表视图控制器的引用(在弹出框被解除后执行工作)。我想将选择保留在弹出框内的表格视图中。这是我在主视图控制器中的 -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;
我的问题是这样的:当我将弹出窗口的 contentViewController 分配给应用程序的主视图控制器引用的表视图控制器(上述方法的最后一行)时,表视图中不会出现任何数据。我已经确认正在创建数据源,甚至尝试在该方法结束时手动调用 tableView 上的 reloadData,但仍然没有出现。
如果我注释掉最后一行(将弹出框 contentViewController 分配给表格视图控制器属性),我会在表格视图中看到数据。但是,每次弹出窗口出现时都会创建一个新的表格视图控制器,这不是我想要的。
如何正确地将弹出框的 contentViewController 分配给我在应用程序的主视图控制器中持有的表格视图控制器,以便在弹出框出现时显示数据?
【问题讨论】:
【参考方案1】:您将无法使用 segue 来执行此操作,因为 segue 总是会实例化新的控制器。如果你想重用内容控制器的同一个实例,那么你需要用类似这样的代码来呈现它,
@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];
【讨论】:
谢谢,我不知道序列总是实例化新的控制器。以上是关于表视图控制器在弹出窗口中分配给 contentViewController 属性时不显示数据的主要内容,如果未能解决你的问题,请参考以下文章