【问题标题】:Show tableView popover as soon as data is loaded加载数据后立即显示 tableView 弹出窗口
【发布时间】:2011-10-13 06:32:29
【问题描述】:

我想在应用加载时从一开始就显示一个带有 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];

  }

【问题讨论】:

    标签: ios ipad uitableview delegates uipopovercontroller


    【解决方案1】:

    表格视图方法是线程化的,因此您在 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 完成调用其数据源和 tableview 委托方法后被调用。

      【讨论】:

      • 你的答案是正确的。不知道为什么 gregory 的解决方法被标记为正确。
      猜你喜欢
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      相关资源
      最近更新 更多