我有UIViewController
个tableviews
:
1-主tableview
,显示在整个view controller
2-第二个viewcontroller
,加载在popup view
。
点击tableview
主cell
时会显示第二个tableview
。
根据cell
被刷过的内容,popup view
中有不同的数据。
我已经在viewdidload
方法中加载了整个数据并将所有内容存储在nsmutablearray
中,因此可以加载。
我的问题是我不知道如何使用tableview
的{{1}},在我的项目中我将DataSource
的数据源链接到tableview
,但是通过这种方式,它会从主视图加载file's owner
,并且不会采用具有第二个numberofrows
的正确计数。
因此,如果在主tableview
中我有例如3个元素,而在第二个tableview
中它应该加载5个元素,它会给我一个错误,(tableview
)。< / p>
我认为我应该将'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index…
与tableviews
联系起来,即使我真的不知道。
我希望明确,如果您需要更多信息或更好的描述,请问我,我会为您做。
答案 0 :(得分:2)
在委托方法中,您应该比较tableview。
参见示例
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(tableView == maintableView)
return VALUE_FOR_MAIN_TABLE_DATA;
else
return VALUE_FOR_POP_TABLE_DATA;
}
答案 1 :(得分:0)
没问题
你只需在桌子上设置标签。
[tableView1 setTag:1];
[tableView2 setTag:2];
然后
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if (tableView.tag == 1) {
return 4;
}
else if (tableView.tag == 2)
{
return 5;
}
}
做类似的事情所有的数据源方法
答案 2 :(得分:0)
您可以将一个View Controller用作多个表视图的唯一数据源,但是您需要使用tableView
方法的UITableViewDataSource
参数来检查哪个表视图正在请求数据。 / p>
例如:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == self.mainTableView)
{
// code for your main table view
}
else
{
// code for your popup table view
}
}
答案 3 :(得分:0)
作为两个表的数据源/委托的视图控制器的相同实例在技术上是可行的,但具有许多陷阱。其中一个是:self.view参考两个表中的哪一个?
但是,大多数数据源协议都会删除对表的引用。您可以使用该重新引用来确定哪个表实际发送请求。但并非该协议的所有方法都包含对该表的引用。这就是它开始变得棘手的地方。
最好使用两个独特的视图控制器,每个控制台一个。在它们之间建立协议,以便主视图控制器可以将数据传递给弹出窗口中的数据,以便弹出窗口可以使用适当的数据自行初始化/加载它,并且可以在数据更改时刷新其视图。
答案 4 :(得分:0)
您需要在所有委托和数据源方法中检查tableview,如下所示:
if (tableView == mainTable)
{
// code for your main table
}
else if (tableView == popupTable)
{
// code for your popup table
}
您对2个或更多表视图执行相同操作。 希望这会有所帮助。
答案 5 :(得分:0)
你可以两种方式做到:
将单独的类作为单独表的数据源。将对象实例化为表的数据源,并在适当的视图控制器中以viewDidLoad
方法绑定它们。
为2个表创建一个数据源,我不建议这样做,因为它不符合正确的OOAD。你会在视图控制器和桌面之间以这种方式进行紧密耦合,这可能会在不久的将来引起麻烦。
您有方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
,您可以在其中区分您所指的表格:
if (tableView == mainTableView) {
// initialize cell for main table view
}
if (tableView == secondTableView) {
// intialize cell for second table view
}