UIPageViewController 中的 TableView 为空

TableView Empty in UIPageViewController

我需要帮助在 UIPageViewController

中使用 TableView 实现一些 UIViewController

这是我当前的代码,但不起作用。一些 UIViewController 出现,但 TableView 是空的,没有单元格。

APageViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  pages = [NSMutableArray array];

  self.delegate = self;
  self.dataSource = self;
}

- (void)viewDidAppear:(BOOL)animated{
  [super viewDidAppear:animated];

  [self setupPageViewController];
}

- (void)setupPageViewController{

  for (int i = 0; i < items.count; i++) {
    AViewControllerWithTableView *detail = (AViewControllerWithTableView *)[self.storyboard instantiateViewControllerWithIdentifier:@"VCID"];
    [detail reloadTableView:items[i]]; // tableview reload data here
    [pages addObject:detail];
  }

  [self setViewControllers:@[pages[0]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

}

#pragma mark - UIPageViewControllerDataSource

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    NSInteger currentIndex = [pages indexOfObject:viewController];
    NSInteger previousIndex = currentIndex-1;
    if (previousIndex < 0) {
        return nil;
    }

    return pages[previousIndex];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    NSInteger currentIndex = [pages indexOfObject:viewController];
    NSInteger nextIndex = currentIndex+1;
    if (nextIndex > pages.count - 1) {
        return nil;
    }

    return pages[nextIndex];
}

AViewControllerWithTableView

@implementation AViewControllerWithTableView{
    NSMutableArray *details;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    details = [NSMutableArray array];
}

- (void)reloadTableView:(NSDictionary *)detail{

  if([detail.type isEqualToString:@"A"]){
    [details addObject:something];
  } else if([detail.type isEqualToString:@"B"]){
    [details addObject:something];
  } else if([detail.type isEqualToString:@"C"]){
    [details addObject:something];
  } else {
    [details addObject:something];
  }

  [self.detailTableView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  NSLog(@"details: %@", details); // details always empty / @[]
  return details.count;
}

表格视图是空的,没有单元格。

你是如何实现这个案例的?

问题:

您正在设置

details = [NSMutableArray array];

在您的 tableView 控制器的 viewDidLoad 中,一旦 PageViewController 加载您的 tableView 就会调用它。

但是您甚至在加载 tableView 之前就通过调用 [detail reloadTableView:items[i]]; 将数据发送到 tableView 控制器。

所以要么你打电话给 reloadTableView 而细节总是 nil 或者即使它已填充,您在 viewDidLoad 中的语句 details = [NSMutableArray array]; 现在已清除它:)

解决方案:

for (int i = 0; i < items.count; i++) {
    AViewControllerWithTableView *detail = (AViewControllerWithTableView *)[self.storyboard instantiateViewControllerWithIdentifier:@"VCID"];
    if(detail.details == nil) {
        detail.details = [NSMutableArray array];
    }
    [detail.details.addObject:items[i]];
    [pages addObject:detail];
  }

终于 从 tableView

的 viewDidLoad 中删除 details = [NSMutableArray array];