我想从应用程序加载时开始使用TableView显示我的Popover。问题是tableView没有任何内容。我正在使用这种方法:
UIBarButtonItem *barItem = [self.toolbar.items objectAtIndex:0];
[self.popoverController presentPopoverFromBarButtonItem:barItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
现在,我的想法是在tableView完成获取数据时触发一个委托方法,但遗憾的是没有任何反应:
RootViewController.h
:
@protocol RootDelegate <NSObject>
@optional
-(void)didFinishLoading;
@end
RootViewController.m
:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];
self.clearsSelectionOnViewWillAppear = NO;
[self setTitle:@"Zielscheiben"];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:@"DataSaved" object:nil];
[[self delegate] didFinishLoading];
}
DetailViewController.m
(符合协议)
- (void)didFinishLoading
{
UIBarButtonItem *barItem = [self.toolbar.items objectAtIndex:0];
[self.popoverController presentPopoverFromBarButtonItem:barItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
答案 0 :(得分:2)
表视图方法是线程化的,因此您在viewDidLoad末尾的调用将在不可预测的时间发生,显然是在表填充之前。我看不到任何委托方法引用事件“表填满”,所以我最好的猜测是保留你的代码并延迟执行:
[[self delegate] performSelector:@selector(didFinishLoading) withObject:nil afterDelay:1]
假设1秒足以填满表格。
你可以探索的另一个选择是当你认为表有足够的数据时会在cellForRowAtIndexPath中触发它,但这在某种程度上更复杂。
答案 1 :(得分:2)
您需要将popover放在viewDidAppear:
中- (void)viewDidAppear {
UIBarButtonItem *barItem = [self.toolbar.items objectAtIndex:0];
[self.popoverController presentPopoverFromBarButtonItem:barItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
在您的UITableView完成调用其数据源和tableview委托方法后调用 viewDidAppear
。