我在SnowLeopard上使用Xcode 4.2,我的项目正在使用故事板。我正在尝试使用2种不同的自定义单元格类型UITableView
和sessionCell
来实现infoCell
。我可以让两种类型出现在同一个列表中,但现在我有一个新问题?! sessionCell
会显示一次,然后会显示infoCells
的X号 - 正如我想的那样 - 除了infoCell
始终覆盖第一个sessionCell
!
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return [self.people count];
}
//inside cellForRowAtIndexPath
if(indexPath.row == 0) {
cell = [tableView dequeueReusableCellWithIdentifier:@"sessionCell"];
} else {
cell = [tableView dequeueReusableCellWithIdentifier:@"infoCell"];
}
...
return cell;
我试图说return array count + 1
,甚至硬编码return 7
(这符合我的例子)但两者都不正确!
myObject *person = [self.people objectAtIndex:indexPath.row];
或者我的问题出在上面这行?我甚至试过indexPath.row+1
...
非常感谢任何帮助!!
答案 0 :(得分:3)
如果我理解你的问题,第一个infoCell
(第二个UITableView
行)应该显示第一个人对象的数据,对吗?
然后你似乎想要:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *sessionCellID = @"sessionID";
static NSString *infoCellID = @"infoID";
if( indexPath.row == 0 ) {
SessionCellClass *cell = nil;
cell = (SessionCellClass *)[tableView dequeueReusableCellWithIdentifier:sessionCellID];
if( !cell ) {
// do something to create a new instance of cell
// either alloc/initWithStyle or load via UINib
}
// populate the cell with session model
return cell;
}
else {
InfoCellClass *cell = nil;
cell = (InfoCellClass *)[tableView dequeueReusableCellWithIdentifier:infoCellID];
if( !cell ) {
// do something to create a new instance of info cell
// either alloc/initWithStyle or load via UINib
// ...
// get the model object:
myObject *person = [[self people] objectAtIndex:indexPath.row - 1];
// populate the cell with that model object
// ...
return cell;
}
}
您需要为行计数返回[[self people] count] + 1
:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[self people] count] + 1;
}
使第n行显示第(n-1)个数据。
答案 1 :(得分:0)
如果你查看if else部分,它会显示第一行是“sessionCell”而所有其他行都是“infoCells”我认为你想做的是将第一行设为sessionCell,第二行设为infoCell以及所有其他行peopleCells
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.people count] + 2; // Added two for sessionCell & infoCell
}
//inside cellForRowAtIndexPath
if(indexPath.row == 0) {
cell = [tableView dequeueReusableCellWithIdentifier:@"sessionCell"];
} else if (indexPath.row == 1 {
cell = [tableView dequeueReusableCellWithIdentifier:@"infoCell"];
} else {
cell = [tableView dequeueReusableCellWithIdentifier:@"personCell"];
Person *person = [self.people objectAtIndex:index.path.row - 2];
}
...
return cell;
更好的是,我会尝试制作两个不同的销售部分,一个用于信息,一个用于人
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return section == 0 ? 2 : self.people.count
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell = nil;
if (indexPath.section == 0) {
if(indexPath.row == 0) {
cell = [tableView dequeueReusableCellWithIdentifier:@"sessionCell"];
// configure session cell
} else if (indexPath.row == 1 {
cell = [tableView dequeueReusableCellWithIdentifier:@"infoCell"];
// configure info cell
}
} else {
cell = [tableView dequeueReusableCellWithIdentifier:@"infoCell"];
Person *person = [self.people objectAtIndexPath:indexPath.row];
// configure person cell
}
return cell;
}