如何初始化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;