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];
我需要帮助在 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];