我正在使用带有UITableViewController和UITableViewCell子类的ios5故事板。我不想在视图的storyboard设计器中设计单元格的可视元素,因为我想使用UITableViewCell的可重用子类(特别是TDBadgedCell)。
我已经在storyboard设计器中设置了我的单元格标识符,只要我没有设置TDBadgedCell独有的任何属性,所有行都在UITableView中正确加载。如果我设置badgeString
属性虽然对于TDBadgedCell是唯一的,但我得到一个例外。我缩小了dequeueReusableCellWithIdentifier:
没有返回TDBadgedCell类型的单元格。
我只是使用UITableViewController进行此操作。我有一个UIViewController与嵌入式UITableView以相同的方式设置,这不是一个问题。有什么想法吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *CellIdentifier = @"PhoneNumberCell";
TDBadgedCell *cell = (TDBadgedCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if ([cell isKindOfClass:[TDBadgedCell class]])
{
NSLog(@"It is TDBadgedCell");
}
else
NSLog(@"It is NOT TDBadgedCell");
答案 0 :(得分:0)
我有类似的问题,因为我是UITableViewCell的子类,但没有使用storyboard。以下是我使用不同单元类的解决方案,具体取决于用户是否购买了应用程序的解锁功能。希望它可以帮到某人。
简而言之,我的单元格包含多个对象,包括UITextView对象。我想在Lite版本中锁定UITextView对象的复制和粘贴功能,但是一旦用户在应用内商品中购买,就会发布该功能。
我有两个UITableViewCell类,一个是UITextView,另一个是UITextView子类,canBecomeFirstresponder返回NO。这样,用户仍然可以向上和向下滚动UITextview数据,但不能复制和粘贴数据。
以下是代码,我所要做的就是重命名重用标识符。
为什么?因为[self.tableview reloadData]不会重建具有新类的单元格,因为单元格仍然存在。离开屏幕的新单元将获得新类,但现有单元不会。此解决方案在购买解锁添加的功能后,一次性重建所有单元格。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (your test if in-app was purchased is yes)
{
static NSString *MyIdentifier = @"MyCell";
FrontCell *cell = (FrontCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[FrontCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.shouldIndentWhileEditing = NO;
}
//....///
cell.trackDetails.text = [yourObject objectAtIndex:indexPath.row];
cell.trackDetails.delegate = self;
cell.trackDetails.tag = indexPath.row;
return cell;
}
else // inapp not purchased
{
static NSString *MyLockedIdentifier = @"MyLockedCell";
FrontCellLocked *cell = (FrontCellLocked *)[tableView dequeueReusableCellWithIdentifier:MyLockedIdentifier];
if (cell == nil)
{
cell = [[FrontCellLocked alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyLockedIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.shouldIndentWhileEditing = NO;
}
//....///
cell.trackDetails.text = [yourObject objectAtIndex:indexPath.row];
cell.trackDetails.delegate = self;
cell.trackDetails.tag = indexPath.row;
return cell; }
}
答案 1 :(得分:0)
在storyboard中,您可以为UITableviewCell的子类设置Custom Class属性。
答案 2 :(得分:0)
我认为你使用错误的方法将细胞出列。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [self.tblProfileInfo dequeueReusableCellWithIdentifier:@"PostCell" forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
你最后忘记了indexPath。