【问题标题】:Paging a TableView, but DataSource/Delegates not executing分页 TableView,但 DataSource/Delegates 未执行
【发布时间】:2012-09-17 13:00:00
【问题描述】:

我在获取要执行的数据源或委托方法时遇到问题。

我在我的 MainViewController 中使用了分页视图,它的分页很好,但是当涉及到 tableview 时是空白的,并且当我在数据源方法所在的位置设置断点时,它永远不会被调用。

MainViewController 加载视图

 if ((NSNull *)controller2 == [NSNull null])
{
    if(page == 2)
    {
        controller2 = [[requestDetailThreeViewController alloc] initWithRequestNumber:[request objectForKey:@"RequestID"]];
        [viewControllers replaceObjectAtIndex:page withObject:controller2];
        CGRect frame = scrollView.frame;
        frame.origin.x = frame.size.width * 2;
        frame.origin.y = 0;
        controller2.view.frame = frame;
        [scrollView addSubview:controller2.view];
    }

}

TableViewController (requestDetailThreeViewController)

    - (void)viewDidLoad
 {
   [super viewDidLoad];



[History fullHistoryWithBlock:^(NSArray *netMessages, NSError *error) {
    if (error) {

        [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil) message:   [error localizedDescription] delegate:nil cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"OK", nil), nil] show];
    } else {
        NSLog(@"Number of Historical Entries: %d", [netMessages count]);

        self.historyFromNet = [NSMutableArray arrayWithArray:netMessages];
    }

} forID:requestNum];

}


   - (id) initWithRequestNumber:(NSString *)requestID
 {

     if (self = [super initWithNibName:@"View" bundle:nil])
  {
      self.requestNum = requestID;
  }
  return self;

}

(为第二个代码块的间距道歉,很难让它进入代码模式。 它执行这两个方法,但它不执行我在类中也有的数据源方法。

在 XIB 文件中,我将 xib 的所有者设置为 requestDetailThreeViewController tableView设置为datasource/delegate和view

如果我在 ViewDidLoad 中将 tableview 设置为隐藏,它确实会消失。

我只是无法让它执行填充表格的方法。

更新:

更多信息-

View XIB 里面只有一个 TableView,没有控制器。

谢谢! 艾伦

【问题讨论】:

    标签: objective-c uitableview delegates datasource paging


    【解决方案1】:

    你可以尝试在-(void)viewDidLoad中设置self.tableView.delegate = self 那就是

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.tableView.delegate = self;
    }
    

    【讨论】:

    • 我忘记了self.tableView.dataSource = self。试一试。
    • 我确实添加了,仍然没有执行数据源方法。
    【解决方案2】:

    您正在添加一个子视图控制器,因此您需要使用 UIViewController 包含方法。

    类似:

        controller2 = [[requestDetailThreeViewController alloc] initWithRequestNumber:[request objectForKey:@"RequestID"]];
        [viewControllers replaceObjectAtIndex:page withObject:controller2];
        [self addChildViewController:controller2];
        CGRect frame = scrollView.frame;
        frame.origin.x = frame.size.width * 2;
        frame.origin.y = 0;
        controller2.view.frame = frame;
        [scrollView addSubview:controller2.view];
        [controller didMoveToParentViewController:self];
    }
    

    还可以考虑将 UIPageViewController 用于分页视图,而不是通过滚动视图手动进行

    【讨论】:

    • 您好,感觉是这个问题,但是还是不行。我没有想过 UIPageViewController。我使用 Apple 的页面控件示例作为跳板。
    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 2016-05-23
    • 1970-01-01
    • 2016-03-09
    • 2018-04-03
    • 2015-01-03
    • 2021-01-18
    • 2013-02-27
    相关资源
    最近更新 更多