问题
In my table view cell i need to display the contents of my array elements in a single cell and if i insert any new contents the previous contents are not to be overwritten.The previous content and my new content should be displayed in order.Here is my code
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableArray *arrMain=[NSMutableArray arrayWithObjects: cnfqty, cnftitle, cnfrate, nil];
finarray=[[NSMutableArray alloc]init];
[finarray addObjectsFromArray:arrMain];
NSLog(@"%@",finarray);
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 150.0;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return ( [finarray count] / 3 );
}
- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier {
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
UILabel *tempLabel;
//UIImage *tempImage;
/* Create UI elements - Customize as you want your text to appear */
CGRect myFirstLabel = CGRectMake (65, 10, 200, 15);
CGRect mySecondLabel = CGRectMake (65, 25, 200, 15);
CGRect myThirdLabel = CGRectMake (65, 40, 200, 15);
// CGRect myImage = CGRectMake (10, 10, 50, 50);
//Initialize first label
tempLabel = [[UILabel alloc] initWithFrame: myFirstLabel];
tempLabel.tag = 1;
tempLabel.font = [UIFont boldSystemFontOfSize:12];
tempLabel.textColor = [UIColor lightGrayColor];
[cell.contentView addSubview: tempLabel];
//Initialize second label
tempLabel = [[UILabel alloc] initWithFrame: mySecondLabel];
tempLabel.tag = 2;
tempLabel.font = [UIFont boldSystemFontOfSize:12];
tempLabel.textColor = [UIColor lightGrayColor];
[cell.contentView addSubview: tempLabel];
//Initialize third label
tempLabel = [[UILabel alloc] initWithFrame: myThirdLabel];
tempLabel.tag = 3;
tempLabel.font = [UIFont boldSystemFontOfSize:12];
tempLabel.textColor = [UIColor lightGrayColor];
[cell.contentView addSubview: tempLabel];
//Initialize your picture
//imgTemp = [[UIImageView alloc] initWithFrame: myImage];
//imgTemp.tag = 4;
//[cell.contentView addSubview: tempImage];
return cell;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"aCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [self getCellContentView: CellIdentifier];
}
//This will create the actual UI elements
UILabel *tempLabel1 = (UILabel *)[cell viewWithTag: 1];
UILabel *tempLabel2 = (UILabel *)[cell viewWithTag: 2];
UILabel *tempLabel3 = (UILabel *)[cell viewWithTag: 3];
//UIImageView *tempImage = (UIImageView *)[cell viewWithTag: 4];
// Populate the labels
NSString *firstText = [NSString stringWithString: [finarray objectAtIndex: 3*(indexPath.row)]];
NSString *secondText = [NSString stringWithString: [finarray objectAtIndex: 3*(indexPath.row) + 1]];
NSString *thirdText = [NSString stringWithString: [finarray objectAtIndex: 3*(indexPath.row) + 2]];
// Populate the picture
//UIImage *picture = [[UIImage alloc] initWithData:theObjectToPutInCell.picture];
tempLabel1.text = firstText;
tempLabel2.text = secondText;
tempLabel3.text = thirdText;
// tempImage.image = picture;
return cell;
}
}
@end
The problem which i'm facing with my code is each string is displayed in each cell and if i insert any new string previous contents are gone and only new contents are displayed.
To get clear idea about this question i'm trying to implement "add to cart" service for online shopping.As per concept the items have to be added from various products and it saves the product info and have to display the details in Table view.But i'm not getting it..
Kindly Guide please..Thanks in advance..
My output is like this first image

But i need to get display as second image which done in Android..

回答1:
Here is something you can try :
Create a function like this one to create all the graphic elements needed :
// Cell appearence editing
- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier {
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
UILabel *tempLabel;
UIImage *tempImage;
/* Create UI elements - Customize as you want your text to appear */
CGRect myFirstLabel = CGRectMake (65, 10, 200, 15);
CGRect mySecondLabel = CGRectMake (65, 25, 200, 15);
CGRect myThirdLabel = CGRectMake (65, 40, 200, 15);
CGRect myImage = CGRectMake (10, 10, 50, 50);
//Initialize first label
tempLabel = [[UILabel alloc] initWithFrame: myFirstLabel];
tempLabel.tag = 1;
tempLabel.font = [UIFont boldSystemFontOfSize:12];
tempLabel.textColor = [UIColor lightGrayColor];
[cell.contentView addSubview: tempLabel];
//Initialize second label
tempLabel = [[UILabel alloc] initWithFrame: mySecondLabel];
tempLabel.tag = 2;
tempLabel.font = [UIFont boldSystemFontOfSize:12];
tempLabel.textColor = [UIColor lightGrayColor];
[cell.contentView addSubview: tempLabel];
//Initialize third label
tempLabel = [[UILabel alloc] initWithFrame: mySecondLabel];
tempLabel.tag = 3;
tempLabel.font = [UIFont boldSystemFontOfSize:12];
tempLabel.textColor = [UIColor lightGrayColor];
[cell.contentView addSubview: tempLabel];
//Initialize your picture
imgTemp = [[UIImageView alloc] initWithFrame: myImage];
imgTemp.tag = 4;
[cell.contentView addSubview: tempImage];
return cell;
}
Then, in your cellForRowAtIndexPath, call the "design function" and populate it with your content :
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"aCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [self getCellContentView: CellIdentifier];
}
//This will create the actual UI elements
UILabel *tempLabel1 = (UILabel *)[cell viewWithTag: 1];
UILabel *tempLabel2 = (UILabel *)[cell viewWithTag: 2];
UILabel *tempLabel3 = (UILabel *)[cell viewWithTag: 3];
UIImageView *tempImage = (UIImageView *)[cell viewWithTag: 4];
// Populate the labels
NSString *firstText = [NSString stringWithString: [finarray stringAtIndex: 3*(indexPath.row)]];
NSString *secondText = [NSString stringWithString: [finarray stringAtIndex: 3*(indexPath.row) + 1]];
NSString *thirdText = [NSString stringWithString: [finarray stringAtIndex: 3*(indexPath.row) + 2]];
// Populate the picture
UIImage *picture = [[UIImage alloc] initWithData:theObjectToPutInCell.picture];
tempLabel1.text = firstText;
tempLabel2.text = secondText;
tempLabel3.text = thirdText;
tempImage.image = picture;
return cell;
}
Let me know if it helps !
回答2:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [itemsData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// static NSString *CellIdentifier = @"Cell";
NSString *CellIdentifier = [NSString stringWithFormat:@"%d", indexPath.row] ;
UILabel *lblTitle = nil;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
lblTitle =[[UILabel alloc]initWithFrame:CGRectMake(5, 15, 110, 44)];
lblTitle.backgroundColor = [UIColor clearColor];
lblTitle.textColor = [UIColor whiteColor];
lblTitle.font = [UIFont systemFontOfSize:11.0];
lblTitle.tag = 1;
lblTitle.numberOfLines = 0;
UILabel *lblType =[[UILabel alloc]initWithFrame:CGRectMake(125, 0, 75, 44)];
lblType.backgroundColor = [UIColor clearColor];
lblType.textColor = [UIColor whiteColor];
lblType.font = [UIFont systemFontOfSize:11.0];
lblType.tag = 2;
UILabel *lblDate =[[UILabel alloc]initWithFrame:CGRectMake(200, 0, 60, 44)];
lblDate.backgroundColor = [UIColor clearColor];
lblDate.textColor = [UIColor whiteColor];
lblDate.font = [UIFont systemFontOfSize:11.0];
lblDate.tag = 3;
UILabel *lblTime =[[UILabel alloc]initWithFrame:CGRectMake(265, 0, 50, 44)];
lblTime.backgroundColor = [UIColor clearColor];
lblTime.textColor = [UIColor whiteColor];
lblTime.font = [UIFont systemFontOfSize:11.0];
lblTime.tag = 4;
[tableView beginUpdates];
[tableView endUpdates];
[cell.contentView addSubview:lblTitle];
[cell.contentView addSubview:lblType];
[cell.contentView addSubview:lblDate];
[cell.contentView addSubview:lblTime];
}
NSString *text = [NSString stringWithFormat:@"%@,%@,%@",[[itemsData objectAtIndex:indexPath.row] objectForKey:@"address"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"title"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"zipcode"]];
CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeCharacterWrap];
if (!lblTitle)
lblTitle = (UILabel*)[cell viewWithTag:1];
[lblTitle setText:text];
[lblTitle setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))];
UILabel *lblType = (UILabel *) [cell.contentView viewWithTag:2];
lblType.text =[[itemsData objectAtIndex:indexPath.row] objectForKey:@"type"];
UILabel *lblDate = (UILabel *) [cell.contentView viewWithTag:3];
lblDate.text =[[itemsData objectAtIndex:indexPath.row] objectForKey:@"date"];
UILabel *lblTime = (UILabel *) [cell.contentView viewWithTag:4];
lblTime.text =[[itemsData objectAtIndex:indexPath.row] objectForKey:@"time"];
return cell;
}
回答3:
Finally i got it by following code
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"aCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
UILabel *label1=[[UILabel alloc]init];
label1.frame=.....;
................
[cell.contentView addSubView: label1];
UILabel *label2=[[UILabel alloc]init];
label2.frame=.....;
................
[cell.contentView addSubView: label2];
UILabel *label3=[[UILabel alloc]init];
label3.frame=.....;
................
[cell.contentView addSubView: label3];
}
The text to the labels are assigned from individual Array element like this
NSMutableArray *label1Array=[NSMutableArray arrayWithObjects:@"",@"",nil];
NSMutableArray *label2Array=[NSMutableArray arrayWithObjects:@"",@"",nil];
NSMutableArray *label3Array=[NSMutableArray arrayWithObjects:@"",@"",nil];
来源:https://stackoverflow.com/questions/11669766/uilabel-in-uitableviewcell-to-make-a-customised-cell-without-making-separate-cla