如何使用动态数量的“页面”在ScrollView中实现动态UITTableViews

时间:2012-08-13 13:56:55

标签: objective-c ios

我一直在尝试实现一个界面,在UITableView中显示UITTableViewCell内的ScrollView内的Page Control内的数据(为了清晰起见,链接到UITableView)。< / p>

我发现了一些教程,展示了如何将这些功能彼此分开但不能在一起实现,而且我并没有真正找到任何关于如何将一些自定义UIViewController加载到控制器中的内容。我的基本方法现在归结为viewDidLoad的{​​{1}}:

for (int i = 0; i < 4; i++) {
    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;

    SceduleTableView *sceduleTable = [[SceduleTableView alloc] initWithFrame:frame];

    [sceduleTable setDelegate:sceduleTable];
    [sceduleTable setDataSource:sceduleTable];
    [self.scrollView addSubview:sceduleTable];
}

我一直在测试4页,但在我完成这些工作之后,这些将会变成动态数量。

SceduleTableView继承自UITableView,并且具有数据源,该数据源从本地sqlite数据库中获取包含对象的数组。我已经让部分工作,所有SceduleTableViews为每个部分加载数据,但目前构建失败并返回此错误:

2012-08-13 15:43:18.975 basis[2055:f803] -[SceduleTableView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x8bc4800
2012-08-13 15:43:18.976 basis[2055:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SceduleTableView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x8bc4800'

该功能并没有真正起作用,但即使是NSLog也永远不会到达:

- (NSInteger)numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"Should have %d rows", sceduleItems.count);
    return sceduleItems.count;
}

我知道我尝试填充表的数组都不是空的,并且SceduleTableView实例不是nil(我读到这可能是问题所在)。这些日志为每个SceduleTableView

返回此值
NSLog(@"Array sceduleItems contains %d", sceduleItems.count);
NSLog(@"Trying to reload. Self = %@", self);
[self reloadData];

2012-08-13 15:49:32.183 basis[2259:f803] Array sceduleItems contains 340
2012-08-13 15:49:32.184 basis[2259:f803] Trying to reload. Self = <SceduleTableView: 0xbabb800; baseClass = UITableView; frame = (960 0; 320 440); clipsToBounds = YES; layer = <CALayer: 0x6e29660>; contentOffset: {0, 0}>

我在iOS开发方面很新,说实话我真的不确定我的方法是否合适。反馈非常感谢!

1 个答案:

答案 0 :(得分:1)

系统尝试调用方法tableView:numberOfRowsInSection:。你还没有定义。您已经定义了方法numberOfRowsInSection:,覆盖了UITableView的默认实现。请不要这样做。

你应该定义

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"Should have %d rows", sceduleItems.count);
    return sceduleItems.count;
}

在您的DataSource中。

此外,许多开发人员可能会对您使用表视图对象作为自己的委托和数据源感到不满。也许您希望熟悉Model-View-Controller范例,以获得更常用的设计方案。