加载数据后立即显示tableView popover

时间:2011-10-13 06:32:30

标签: ios ipad uitableview delegates uipopovercontroller

我想从应用程序加载时开始使用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];

  }

2 个答案:

答案 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