2017-03-07 67 views
0

我需要帮助的UIPageViewController的TableView在UIPageViewController

这是我当前的代码实现一些UIViewControllerTableView,但不是出于行为空。一些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; 
} 

的tableview是空的,没有细胞。

你是如何实现这种情况?

回答

0

问题:

你在你的tableView控制器的viewDidLoad中一次PageViewController加载您的tableView这被称为设置

details = [NSMutableArray array]; 

但是,即使在加载tableView之前,您仍然通过调用[detail reloadTableView:items[i]];将数据发送到您的tableView控制器。

因此,无论你叫reloadTableView而细节总是零 或者即使它填充了声明details = [NSMutableArray array];在viewDidLoad中已被清除它:)

解决方案:

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]; 
    } 

最后 从删除details = [NSMutableArray array]; viewDidLoad你的tableView

+0

谢谢,它的工作原理。 – Hezron

+0

@hezron:很高兴它帮助你:) –