数据加载后立即显示tableView弹出窗口



我想显示一个我的Popover与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];
  }

表视图方法是线程的,所以你在viewDidLoad结束时的调用将发生在一个不可预测的时间,显然在表被填满之前。我看不到任何委托方法引用事件"表已填满",所以我最好的猜测是保留您的代码并延迟其执行:

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

假设1秒足够填满表。

您可以探索的另一个选项是在cellForRowAtIndexPath中某个时候当您认为表已获得足够的数据时触发它,但这在某种程度上更复杂。

你需要将弹出窗口放置在viewDidAppear:

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

viewDidAppear在你的UITableView调用完它的数据源和表视图委托方法后被调用。

最新更新