我有一个包含 2 个部分的表格视图。我希望每个部分只选择一行。现在我可以选择一行,但它适用于整个表格。最终,我希望选择 2 行,但每个 SECTION 只能选择 1 行。我已经坚持了好几天了,无法弄清楚。这可能吗??我是 Xcode 的新手,所以非常感谢任何帮助。提前致谢!
这是我的代码:
// OptionsViewController.h
#import <UIKit/UIKit.h>
@interface OptionsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
NSArray *themeDataArray;
NSArray *levelDataArray;
NSIndexPath *selectedRowIndex;
}
@property (weak, nonatomic) NSArray *themeDataArray;
@property (weak, nonatomic) NSArray *levelDataArray;
@property (weak, nonatomic) NSIndexPath *selectedRowIndex;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
// OptionsViewController.m
#import "OptionsViewController.h"
@interface OptionsViewController ()
@end
@implementation OptionsViewController
- (void)viewDidLoad
{
themeDataArray = [[NSArray alloc] initWithObjects:@"Classic",@"Animals",@"Dinosaurs",@"Cars", nil];
levelDataArray = [[NSArray alloc] initWithObjects:@"Easy",@"Medium",@"Hard", nil];
//set default rows on startup
NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
NSIndexPath *indexPath2=[NSIndexPath indexPathForRow:0 inSection:1];
[self.tableView selectRowAtIndexPath:indexPath2 animated:YES scrollPosition:UITableViewScrollPositionNone];
[super viewDidLoad];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection (NSInteger)section
{
//For each section, return header label
if(section == 0) return @"Themes";
if(section == 1) return @"Difficulty Level";
return nil;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//For each section, return number of rows in section
if(section == 0) return [themeDataArray count];
if(section == 1) return [levelDataArray count];
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell1 = nil;
//recycles cells to save memory
cell1 = [tableView dequeueReusableCellWithIdentifier:@"cell1"];
if (cell1 == nil)
{
cell1 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell1"];
}
cell1.textLabel.text=[themeDataArray objectAtIndex:indexPath.row];
return cell1;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView reloadData];
switch (indexPath.section)
{
case 0:
{
if (self.selectedRowIndex)
{
UITableViewCell *deselectCell = [tableView cellForRowAtIndexPath:self.selectedRowIndex];
deselectCell.highlighted = FALSE;
[tableView reloadData];
}
//select new row and assign new indexPath
UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
newCell.highlighted = TRUE;
self.selectedRowIndex = indexPath;
break;
}
case 1:
{
if (self.selectedRowIndex)
{
UITableViewCell *deselectCell = [tableView cellForRowAtIndexPath:self.selectedRowIndex];
deselectCell.highlighted = FALSE;
}
//select new row and assign new indexPath
UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
newCell.highlighted = TRUE;
self.selectedRowIndex = indexPath;
break;
}
default:
break;
}
}
@end