- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
cell.firstLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
cell.secondLabel.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row];
return cell;
}
这是Apple Table View Programming Guide
的代码段 MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
工作正常,不需要检查nil,因为单元格在故事板中定义,并且总是返回有效单元格。
但是,如果我不使用故事板,以编程方式在我的tableview中如何使用多个自定义单元格?涉及哪些问题allocating and initializing MyTableViewCell
答案 0 :(得分:1)
您也可以这样使用自己的自定义单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell";
MyTableViewCell *cell=(MyTableViewCell *)[self.yourtableview dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:0];//change as per your need
if(cell==nil)
{
[[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];
cell=self.mytableviewcellref;
}
cell.textLabel.text=@"sometext";
return cell;
}
希望它可以帮助你..
答案 1 :(得分:1)
如果你想以编程方式创建单元格,那么你需要像这样分配和初始化表格单元格。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"cell";
UITableViewCell *cell = [listtableview dequeueReusableHeaderFooterViewWithIdentifier:identifier];
if (cell ==nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
}
答案 2 :(得分:1)
你应该使用方法
- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier
UITableView的。您可以阅读文档here。
当您调用方法
时- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier
,它检查重用队列中是否有可用的单元。如果没有,它会检查它是否可以自动创建此单元格。如果您之前已为此重用标识符注册了单元类或nib,则它将使用类或nib创建新单元并将其返回。如果你没有注册任何东西,它将返回nil。
最好使用注册,因为如果您为不同的重用标识符使用不同的自定义单元格,则创建这些单元格的代码会变得混乱。这也是正确的方式。注册方法分别在iOS5和iOS6中添加。程序员创建自定义单元格的代码与旧版本的iOS相关。
答案 3 :(得分:0)
您可以使用另一种方法:
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"> forIndexPath:indexPath];
您传递了其他参数 - indexPath。 之后检查单元格是否为零,如果是,则分配并初始化它。
答案 4 :(得分:0)
如果您没有使用故事板,则需要针对nil检查单元格,如果是,则分配新单元格。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = @"MyIdentifier";
MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.firstLabel.text = [NSString stringWithFormat:@"%d", indexPath.row];
cell.secondLabel.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row];
return cell;
}