我有一些数据库,我正在生成这样的数据。
首先从数据库中获取categoryid和categoryName。该表的sectiontitle是categoryName。
这是一些示例代码
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return categoryNamesList.count;
}
-(NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [categoryNamesList objectAtIndex:section];
}
我想在类别ID的基础上生成flashcardid和flashcard名称。 categoryid存储在数据库中,如1,2,3。
所以我在查询中传递categoryid:
select flashCardId,flashCardName from flashCardInfo where categoryId=(parameter)
在flashcardid中我得到1,2,3并且在flashcards名称数组中我第一次得到flashcard1,flashcard2,flashcard3现在我想在我的单元格上生成文本,如第1部分的firstcategoryname,然后是相关的flashcard名称行然后在第二部分第二类别名称和行上相关的flashcardsNames。在哪里增加类别ID,以便我得到下一个名称nad id以及如何在单元格上设置文本
现在如何在
上生成此内容这是代码;它位于indexviewcontroller.m
文件中。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return categoryNamesList.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return flashCardsNamesList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
if(categoryID<listOfCategoryId.count)
{
for(int i=0;i<flashCardsNamesList.count;i++)
{
[cell.FlashCardsNames setText:[flashCardsNamesList objectAtIndex:i]];
}
categoryID++;
[self getFlashCard:categoryID];
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[indexTableView deselectRowAtIndexPath:indexPath animated:YES];
for(int i=0;i<flashCardsId.count;i++)
{
questionViewControllerObj = [[flashCardQuestionViewController alloc] initWithNibName:@"FlashCardQuestionView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:questionViewControllerObj animated:YES];
questionViewControllerObj.flashcardid = [[flashCardsId objectAtIndex:i] intValue];
questionViewControllerObj.categoryid = [[listOfCategoryId objectAtIndex:indexPath.section]intValue];
}
}
/*
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
}
if (editingStyle == UITableViewCellEditingStyleInsert) {
}
}
*/
/*
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
*/
/*
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/
/*
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
*/
-(NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [categoryNamesList objectAtIndex:section];
}
# pragma mark -
# pragma mark viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
[self getIntialData];
self.navigationItem.title = @"Index";
indexTableView.backgroundColor = [UIColor lightGrayColor];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
}
- (void)viewDidDisappear:(BOOL)animated {
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark -
#pragma mark Database Methods
-(void)getIntialData
{
[self getcategory];
[self getFlashCard:categoryID];
}
//getting categoryid,categoryname from the database
-(void)getcategory
{
if(listOfCategoryId!=nil)
[listOfCategoryId removeAllObjects];
else
listOfCategoryId = [[NSMutableArray alloc] init];
if(categoryNamesList!=nil)
[categoryNamesList removeAllObjects];
else
categoryNamesList = [[NSMutableArray alloc] init];
if(listOfCategoryType!=nil)
[listOfCategoryType removeAllObjects];
else
listOfCategoryType = [[NSMutableArray alloc] init];
clsDatabase *clsDatabaseObject = [[clsDatabase alloc] init];
sqlite3_stmt *dataRows = [clsDatabaseObject getDataset:"select categoryId,categoryName,categoryType from cardCategoryInfo"];
while(sqlite3_step(dataRows) == SQLITE_ROW)
{
[listOfCategoryId addObject:[NSNumber numberWithInt:sqlite3_column_int(dataRows,0)]];
[categoryNamesList addObject: [NSString stringWithUTF8String:(char *)sqlite3_column_text(dataRows,1)]] ;
[listOfCategoryType addObject:[NSNumber numberWithInt:sqlite3_column_int(dataRows,2)]];
}
sqlite3_finalize(dataRows);
[clsDatabaseObject release];
categoryID = [[listOfCategoryId objectAtIndex:categoryID] intValue];
}
//getting flashcardId and flashcard name from categoryid
-(void)getFlashCard:(int)categoryid
{
if(flashCardsId!=nil)
[flashCardsId removeAllObjects];
else
flashCardsId = [[NSMutableArray alloc] init];
if(flashCardsNamesList!=nil)
[flashCardsNamesList removeAllObjects];
else
flashCardsNamesList = [[NSMutableArray alloc] init];
NSString *martialStr=[NSString stringWithFormat:@"%d", categoryid];
NSString *queryStr=[[NSString alloc] initWithString:@"select flashCardId,flashCardName from flashCardInfo where categoryId="];
queryStr=[queryStr stringByAppendingString:martialStr];
unsigned int lengthOfString=[queryStr length];
char temp2[lengthOfString +1];
strcpy(temp2, [queryStr cStringUsingEncoding:NSUTF8StringEncoding]);
clsDatabase *clsDatabaseObject = [[clsDatabase alloc] init];
sqlite3_stmt *dataRows = [clsDatabaseObject getDataset:temp2];
while(sqlite3_step(dataRows) == SQLITE_ROW)
{
[flashCardsId addObject:[NSNumber numberWithInt:sqlite3_column_int(dataRows,0)]];
[flashCardsNamesList addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(dataRows,1)]];
}
sqlite3_finalize(dataRows);
[clsDatabaseObject release];
}
- (void)dealloc {
[self.navigationController popViewControllerAnimated:YES];
[listOfCategoryId release];
[listOfCategoryType release];
[questionViewControllerObj release];
[categoryNamesList release];
[flashCardsNamesList release];
[flashCardsId release];
[indexTableView release];
[super dealloc];
}
@end
答案 0 :(得分:3)
您需要实现cellForRowAtIndexPath来填充每个表格部分中的行。
e.g。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// This method gets called for each section and row in your table
NSUInteger cellRow = [indexPath row];
NSUInteger cellSection = [indexPath section];
// Create new table cell
// Deliberately ignoring reusing cells to keep this example simple
UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"MyIdentifier"] autorelease];
// Now build up a string with the info you want in it based on
// data in cellSection and cellRow, and set the cell text
cell.text = @"put your text here";
更新:如果您希望有人为您编写所有代码,则需要编辑您的帖子,使其更短更清晰。只需解释一下您拥有的数据结构,以及表格的外观,例如:
DATA STRUCTURES
-NSDictionary of section names as keys.
-Each NSDictionary key points at an NSArray, which holds NSStrings that need to go in each row.
DESIRED OUTPUT
section 0 heading
row 0
row 1
section 1 heading
row 0
row 1
等
答案 1 :(得分:1)
重用细胞
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"MyIdentifier"] autorelease];
}
// Configure the cell
...
return cell;