我有一个UITableViewController,它有两个IBOutlet到两个不同的UITableViewCell,它们是在IB中制作的。但是它们没有出现在tableView中。如果你能找到错误,我将非常感激。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *categoryIdentifier = @"Category";
static NSString *songDetailsCellIdentifier = @"sdci";
static NSString *socialCellIdentifier = @"sdcssi";
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
switch (indexPath.row) {
case 0:
//imageView = [[UIImage alloc] initWithData:imageData];
//songNameLabel.text = songName;
//artistNameLabel.text = artistName;
//albumNameLabel.text = albumName;
//numberInChartsLabel.text = [[NSString alloc] initWithFormat:@"%d", numberInCharts];
break;
case 1:
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:categoryIdentifier] autorelease];
cell.textLabel.text = [[NSString alloc] initWithFormat:@"Category"];
cell.detailTextLabel.text = [[NSString alloc] initWithFormat:@"%@", category];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 2:
cell.textLabel.text = [[NSString alloc] initWithFormat:@"Preview This Track"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 3:
cell.textLabel.text = [[NSString alloc] initWithFormat:@"View This Song In iTunes"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 4:
cell.textLabel.text = [[NSString alloc] initWithFormat:@"View Artist In iTunes"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
break;
case 5:
break;
}
// Configure the cell...
if (indexPath.row == 0) {
songDetailsCell = [[[UITableViewCell alloc] initWithFrame:songDetailsCell.frame reuseIdentifier:songDetailsCellIdentifier] autorelease];
return songDetailsCell;
}
if (indexPath.row == 5) {
socialCell = [[[UITableViewCell alloc] initWithFrame:socialCell.frame reuseIdentifier:socialCellIdentifier] autorelease];
return socialCell;
}
else if (indexPath.row >= 1 && indexPath.row <=5)
{
return cell;
}
return nil;
}
答案 0 :(得分:0)
将开关置于if{indexPath.section}
语句中,包括UITableViewCell *cell...
然后下面的其余部分必须是indexPath.section
,而不是indexPath.row
if(indexPath.section==0) {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
switch (indexPath.row) {
case 0:
....
if (indexPath.section == 1) {
songDetailsCell = [[[UITableViewCell alloc] initWithFrame:songDetailsCell.frame reuseIdentifier:songDetailsCellIdentifier] autorelease];
return songDetailsCell;
}
....
遵循这种格式。
答案 1 :(得分:0)
如果我正确阅读,那么系统无法知道您有自定义单元格。您的单元格被分配并使用UITableViewCell作为类型进行初始化。它们应该是MyCustomCell的类型,或者在Interface Builder中创建它们时所谓的单元格对象。
因此,您将在代码的这一部分中引用您的单元格而不是UITableViewCell:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
Pragmatic Studio在制作自定义表格单元格时有一个great, free screencast。它在Interface Builder中称为自定义表格单元格。大约20分钟。