2011-10-13 39 views
2

我想从应用加载时开始显示带有TableView的弹出窗口。问题是tableView没有任何内容。我使用的方法:加载数据后立即显示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]; 

    } 

回答

2

表视图方式有螺纹所以你在viewDidLoad中结束通话将被填充表之前在一个不可预知的时间发生,显然这里。我看不出有任何的委托方法指的“表装”事件,所以我最好的猜测是保持你的代码和延迟执行:

[[self delegate] performSelector:@selector(didFinishLoading) withObject:nil afterDelay:1] 

假设1秒钟后有足够的表变得充实。

您可以探索的另一个选择是,当您认为表格中有足够的数据时,可以在cellForRowAtIndexPath中随时启动它,但这在某种程度上会更复杂。

2

您需要将您的酥料饼在viewDidAppear:

- (void)viewDidAppear { 
    UIBarButtonItem *barItem = [self.toolbar.items objectAtIndex:0]; 
    [self.popoverController presentPopoverFromBarButtonItem:barItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
} 

viewDidAppear后您的UITableView已完成调用其数据源,实现代码如下委托方法被调用。

+1

你的回答是正确的。不知道为什么gregory的解决方法被标记为正确。 – habamedia