我是ios开发的新手,我想在一个uitableview中的不同部分实现不同的单元格样式。我的tableview有两个部分,每个部分有三行。
我知道不同的单元格应该有不同的reuseidentifier来检索重用单元格,但是当我编译我的应用程序时,控制台总是会显示以下信息:
2012-08-26 14:04:45.571 Defferent Cell Styles[703:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
我们非常感谢任何帮助,我的代码如下:
@end
@implement LGViewController
@synthesize data = _data;
@synthesize list = _list;
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *dataArray = [[NSArray alloc] initWithObjects:@"fwfwf", @"ffgfg", @"sfsfsf", nil];
NSArray *listArray = [[NSArray alloc] initWithObjects:@"fdff", @"ffdfsw", @"eergerg", nil];
self.data = dataArray;
self.list = listArray;
self.navigationItem.title = @"Data";
}
#pragma mark - DataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == 0) {
return [_data count];
}
else if (section == 1){
return [_list count];
}
return section;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *accessoryIdentifier = @"Cells";
static NSString *switchIdenfier = @"Cells";
static NSString *sliderIdentifier = @"Cells";
UITableViewCell *cell;
if ((indexPath.section == 0 && indexPath.section == 1) && indexPath.row == 0)
{
cell = [tableView dequeueReusableCellWithIdentifier:accessoryIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:accessoryIdentifier];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
else if ((indexPath.section == 0 && indexPath.section ==1) && indexPath.row == 1)
{
cell = [tableView dequeueReusableCellWithIdentifier:switchIdenfier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:switchIdenfier];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UISwitch *soundSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
[soundSwitch addTarget:self action:@selector(showAlert) forControlEvents:UIControlEventValueChanged];
[soundSwitch setOn:NO animated:NO];
cell.accessoryView = soundSwitch;
}
else if ((indexPath.section ==0 && indexPath.section == 1) && indexPath.row == 2)
{
cell = [tableView dequeueReusableCellWithIdentifier:sliderIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:sliderIdentifier];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 60, 20)];
cell.accessoryView = slider;
}
return cell;
}
答案 0 :(得分:2)
你永远不会返回一个单元格,因为indexPath.section永远不能同时为0和1:
else if ((indexPath.section ==0 && indexPath.section == 1) && indexPath.row == 2)
应该是
else if ((indexPath.section ==0 || indexPath.section == 1) && indexPath.row == 2)
在所有情况下。 ||
是OR,&&
是AND。
尽管如此,你可以放弃检查部分,因为它总是为0或1.
答案 1 :(得分:2)
配置单元格的更好方法
if (indexPath.section == 0) {
switch (indexPath.row) {
case 0:
//configure you cell here..
break;
case 1:
//configure you cell here..
break;
case 2:
//configure you cell here..
break;
default:
break;
}
} else if (indexPath.section == 1) {
switch (indexPath.row) {
case 0:
//configure you cell here..
break;
case 1:
//configure you cell here..
break;
case 2:
//configure you cell here..
break;
default:
break;
}
} else if (indexPath.section == 2) {
switch (indexPath.row) {
case 0:
//configure you cell here..
break;
case 1:
//configure you cell here..
break;
default:
break;
}
}
}
return cell;