gpt4 book ai didi

ios - iOS 中的可扩展 ListView

转载 作者:可可西里 更新时间:2023-11-01 05:36:39 28 4
gpt4 key购买 nike

我需要在我的 iOS 应用程序中创建可扩展 ListView ,即。如果您点击一个单元格,它应该会扩展以提供更多单元格。我正在关注此链接上给出的示例:Toggle showing/hiding child table cells iOS此处也给出了实现文件的代码:http://pastie.org/7756763

但是,在上面的示例中,数组是固定的。我有一个 sqlite 数据库,我在其中存储任务及其开始日期等。我需要创建一个可扩展 View ,其中不同的行是不同的开始日期,当我点击一个日期时,它应该给出该日期的任务。这是代码:

- (void)viewDidLoad
{
[super viewDidLoad];
allDates = [[NSMutableArray alloc]init];

self.date = [[NSMutableArray alloc] initWithObjects: nil];
// self.date = [[NSMutableArray alloc]init];
self.listOfSections_DataSource = [[NSMutableArray alloc]initWithObjects:nil];

sqlite3_stmt *statement;
const char *dbpath = [mDatabasePath UTF8String];
if (sqlite3_open(dbpath,&mDiary)== SQLITE_OK) {
NSString *selectSQL = [NSString stringWithFormat:@"SELECT * FROM TODO"];
const char *query_stmt = [selectSQL UTF8String];
if (sqlite3_prepare_v2(mDiary,
query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
while(sqlite3_step(statement) == SQLITE_ROW)
{
tempTaskName = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)];
[allDates addObject:[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)]];

[self.date addObject:tempTaskName];


}

}
sqlite3_finalize(statement);
}
sqlite3_close(mDiary);

NSLog(@"%i",[allDates count]);

for(int x = 0;x < [allDates count];x++)
{
if (sqlite3_open(dbpath,&mDiary)== SQLITE_OK) {
NSString *selectSQL = [NSString stringWithFormat:@"SELECT * FROM TODO"];
const char *query_stmt = [selectSQL UTF8String];

if (sqlite3_prepare_v2(mDiary,
query_stmt, -1, &statement, NULL) == SQLITE_OK){
temp = [[NSMutableArray alloc]init];
while(sqlite3_step(statement) == SQLITE_ROW)
{
tempTaskName = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)];
NSLog(@"%@",tempTaskName);
// [allDates addObject:[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)]];
if([[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)] isEqualToString:allDates[x]])
{
[self.temp addObject:tempTaskName];
}




}
NSLog(@"task name%@",temp);
[listOfSections_DataSource addObject:temp];

} sqlite3_finalize(statement);
}
sqlite3_close(mDiary);
}

//[self.listOfSections_DataSource addObject:allDates];

NSMutableArray *emptyArray = [[NSMutableArray alloc]init];
listOfSections = [[NSMutableArray alloc]init];
for (int i = 0;i<[allDates count]; i++) {
[listOfSections addObject:emptyArray];
}
self.selectedSection = -1;
self.selectedSectionTail = -1;
}

表格 View 方法是:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {


return [listOfSections_DataSource count];


}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

if(selectedSection !=section)
return 1;
else{
NSArray *array = [listOfSections objectAtIndex:section];

return [array count];
}

}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"cell";

if(self.selectedSection == indexPath.section){//this is just to check to see if this section is the one we touched

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

NSArray *myArray = [listOfSections_DataSource objectAtIndex:indexPath.section];//this now contains your cities
NSString* myString = [myArray objectAtIndex:indexPath.row]; // get city for that row, under the state

cell.textLabel.text = myString;
return cell;
}
else{//THIS IS going to happen the first time
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

cell.textLabel.text = @"more";

return cell;
}
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];

//check to see if the cell is for exapnding or for selection
if([cell.textLabel.text isEqualToString:@"more"]){ // this means we need to expand

listOfSections = [[NSMutableArray alloc]init];
//setting up the list of section with empty arrays

NSMutableArray *emptyArray = [[NSMutableArray alloc]init];
for (int i = 0;i<[allDates count]; i++) {
[listOfSections addObject:emptyArray];
}

//Add array of tasks here
[listOfSections replaceObjectAtIndex:indexPath.section withObject:[listOfSections_DataSource objectAtIndex:indexPath.section]];


int tapedRow = [indexPath section];

self.selectedSection = tapedRow;

NSMutableIndexSet *myIndexSet = [[NSMutableIndexSet alloc]init];
[myIndexSet addIndex:selectedSection];
[myIndexSet addIndex:selectedSectionTail];

// Updating section in the tableview
if(selectedSectionTail!=-1)
[taskTable reloadSections:(NSIndexSet*)myIndexSet withRowAnimation:UITableViewRowAnimationFade];
else {
[taskTable reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:
UITableViewRowAnimationFade];
}
//[taskTable reloadData];
}
else{
}
selectedSectionTail = selectedSection;
}

这里的问题是:1. 屏幕上显示的部分数量是正确的,但是当第一个单元格被点击时,它就消失了。2. 当点击任何单元格时,列表不会展开。

谁能帮帮我?谢谢..

最佳答案

此样本可能就是您要找的:http://developer.apple.com/library/ios/#samplecode/TableViewUpdates/Introduction/Intro.html

该示例从静态数据中提取,但您应该能够更新它以使用数据库中的动态数据,并为任务指定日期等。

关于ios - iOS 中的可扩展 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354279/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com