如何初始化iOS 5故事板中的自定义原型样式表单元格?

我转换到iOS 5和故事板。 当我有默认的单元格样式的表视图,一切工作正常。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifierFromStoryboard"]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIdentifierFromStoryboard"]; } return cell; } 

我已经看到“if(cell == nil)”块被删除的例子。 但是,如果我把它拿出来,我的应用程序崩溃的消息:“UITableView dataSource必须从tableView:cellForRowAtIndexPath:”返回一个单元格。 这不是一个问题,因为它的工作原理如上所示。

我的问题是,我想为单元格使用自定义样式,因此不能使用initWithStyle。 如何初始化我在故事板上devise的自定义单元格?

旧的前5应用程序有一个笔尖和类使用这样的事情,但现在我正在使用故事板。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { MyCustomTableCell *cell = (MyCustomTableCell *) [tableView dequeueReusableCellWithIdentifier:@"MyCustomIdentifier"]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomTableCell" owner:self options:nil]; cell = (MyCustomTableCell *) [nib objectAtIndex:0]; } return cell; } 

这条路

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } return cell; } 

这对我来说很完美(Xcode 4.5.2和iOS 6.0):

 -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; if( cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; } UILabel *title = (UILabel*) [cell viewWithTag:1000]; UILabel *summary = (UILabel*) [cell viewWithTag:1001]; [title setText:[ tableMainTitle objectAtIndex:indexPath.row]]; [summary setText:[ tableSubTitle objectAtIndex:indexPath.row]]; return cell; } 

重要提示:不要忘记设置委托和数据源。

如果你加载你的视图控制器包含tableview使用:

 MyViewController *myViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"]; 

然后在cellForRowAtIndexPath里面,你只需要一行:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifierFromStoryboard"]; 

如果不存在, dequeueReusableCellWithIdentifier将实例化一个单元格。

我认为这个工作得很好。 我试图让我的头在一段时间,并感谢它的工作..以及我正在这样做,当试图分配一个单元格我分配使用一般单元类而不是我已经创build

所以我正在这样做,所以这就是为什么它没有工作

 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

所以,而不是UITableViewCell分配单元与您的类,以及上面的例子“CustomCell”

再次感谢

 static NSString *identifier=@"SearchUser"; SearchUserCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier]; if (cell==nil) { cell=[[SearchUserCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } return cell;