2017-03-07 68 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:很高興它幫助你:) –