我需要创建一个分组的UITableView,其中包括在各节的某些部分,可能不同的细胞类型。
我试图创造一些像老Foursquare的应用程序,用户页面(包括“排行榜”,“朋友的建议”,“朋友”,“统计”,“最探索类别” ......段)。
我是相当新的IOS编程,所以这种观点可能不是一个分组的UITableView。
我特别卡住创造不同的细胞部分,并找出被点击的细胞。
我的数据来源将是2个不同的NSArray *,它由不同的数据类型,这就是为什么我需要不同的定制单元。
我需要创建一个分组的UITableView,其中包括在各节的某些部分,可能不同的细胞类型。
我试图创造一些像老Foursquare的应用程序,用户页面(包括“排行榜”,“朋友的建议”,“朋友”,“统计”,“最探索类别” ......段)。
我是相当新的IOS编程,所以这种观点可能不是一个分组的UITableView。
我特别卡住创造不同的细胞部分,并找出被点击的细胞。
我的数据来源将是2个不同的NSArray *,它由不同的数据类型,这就是为什么我需要不同的定制单元。
既然你有两个不同的数据集,你需要在不同的部分同时显示,您必须将数据源方法一分为二。
基本上,选择你想成为第一个和您去哪个数据集。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section)return secondArray.count;
//Essentially, if statements evaluate TRUE and move forward if the inside is 1 or greater (TRUE == 1)
return firstArray.count;
//If the first if statement return hits, then the code will never reach this statement which turns this into a lighter if else statement
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section)
{
//do stuff with second array and choose cell type x
}
else
{
//do stuff with first array and choose cell type y
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Get the cell with: UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if(indexPath.section)
{
//perform action for second dataset
}
else
{
//perform action for first dataset
}
}
对于头,您可以使用这些方法,只是保持相同类型的样式如上:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
您可以创建的UITableViewCell的多个自定义子类,并在的tableView:的cellForRowAtIndexPath:方法为您UITableViewDataSource,你可以使用if语句来决定使用什么类型的细胞。
例如,这里是什么,我会做一个大致的轮廓:
-(UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//First, determine what type of object we're showing
if (indexPath.section == 0) {
//Create and return this cell.
} else if (indexPath.section == 1) {
//Create and return this cell.
}...
}
这里是你如何实现numberOfRowsInSection
:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
return [firstSectionArray count];
} else if (section == 1) {
return [secondSectionArray count];
} ...
}
对于didSelectRowAtIndexPath
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
ObjectSelected *objectSelected = [firstArray objectAtIndex:indexPath.row];
//Now you've got the object, so push a view controller:
DetailViewController *dvc = [[DetailViewController alloc] init];
dvc.objectSelected = objectSelected;
[self.navigationController pushViewController:dvc];
} else if (indexPath.section == 1) {
//Same thing, just call [secondArray objectAtIndex:indexPath.row] instead!
}
}