我有一个带有两个不同自定义表格单元格的UITableView。启动应用程序后,第一个单元格显示正常。单击它们时将出现第二个单元格。
任何人都可以帮助我或有想法吗?
非常感谢。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *MyIdentifier = @"customCell2";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if(cell == nil){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
cell.backgroundColor = [UIColor clearColor];
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.textLabel.textColor = [UIColor grayColor];
cell.textLabel.font = [UIFont fontWithName:@"STHeitiSC-Light" size:9.0];
}
return cell;
}
答案 0 :(得分:1)
过去做过自定义UITableViewCell我经常处理自定义类本身的nib加载。
自定义单元格的基本标题。
@interface RequestsTableViewCell : UITableViewCell {
// Ivars.
}
// Properties.
- (id) initWithRequestModel: (RequestModel *) model style:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier forQueryType:(int) requestType;
// Other methods, etc.
@end
带有指定初始化程序的自定义单元格。
@implementation RequestsTableViewCell
- (id) initWithRequestModel: (RequestModel *) model style:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier forQueryType:(int) requestType {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"RequestsTableViewCell" owner:self options:nil];
self = [nibArray objectAtIndex:0];
requestModel = model;
queryType = requestType;
[self setRequestThumbnail];
[self setRequestCategory];
[self setRequestAddress];
[self setRequestStatusDate];
[self setRequestStatus];
[self setRequestFollowed];
[self setRequestComment];
[self setAppearance];
}
return self;
}
对于自定义UITableViewCell,还有一个自定义xib,它对应并在身份检查器中设置了自定义类。
在UITableViewController中。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellId = @"Cell Id";
RequestModel *request = nil;
// Other code for search, etc
request = [self.serviceRequests objectAtIndex:indexPath.row];
RequestsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if(!cell) {
cell = [[RequestsTableViewCell alloc] initWithRequestModel:request style:UITableViewCellStyleDefault reuseIdentifier:cellId forQueryType:queryTypeIndicator];
}
return cell;
}
听起来您的问题中有多个自定义单元格类型?你能详细说明它应该如何运作吗?你说你必须点击一个单元格才能显示另一个单元格,你能解释一下这种交互吗?
答案 1 :(得分:1)
我做了类似的事情,但让细胞'扩展',而不是添加新细胞。当然,你没有两个单元格,但你可以调整一个单元格的大小,添加子框架......
您可以在UITableViewCell对象(BOOL cellIsExpanded
)中保留一个布尔值,并在点击手势上设置该布尔值。然后在TableViewCell的drawRect中,相应地布局您的单元格。
示例代码,在展开时,使单元格高度为20 - > 80并添加UIButton:
在TableViewController中,重载heightForRowAtIndexPath(如果'展开',这将调整你的单元格的大小):
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
YourEntity *record = [self.fetchedResultsController objectAtIndexPath:indexPath];
if (!record.cellIsExpanded)
return 20.; // cell is smaller if collapsed
else
return 80.; // bigger cell
}
在TableViewCell中,添加或删除子帧:
@interface MyTableViewCell ()
@property(nonatomic) BOOL cellIsExpanded
@property(strong, nonatomic) UITextField *myTextField;
@property(strong, nonatomic) UIButton *clickMeButton;
@end
@implementation MyTableViewCell
- (void)drawRect:(CGRect)rect {
if(!self.cellIsExpanded){
// layout your collapsed cell, for example:
self.myTextField = [[UITextField alloc] initWithFrame:self.frame];
self.myTextField.text = @"Collapsed cell";
// remove button, only present in expanded view :
self.clickMeButton=nil;
}
else{
self.myTextField.text = @"Expanded cell";
// add button below textfield
self.clickMeButton = [[UIButton alloc] initWithFrame:CGRectMake(20, 20, 10, 10)];
}
}
@end