Заполните разделы табличного представления строками таблицы в базе данных sqlite в порядке - PullRequest
3 голосов
/ 12 декабря 2011

У меня есть 2 страницы контроллера просмотра. Добавить страницу напоминания, которая содержит кнопку сохранения в виде правой кнопки панели навигации

У меня ранее возникали проблемы, связанные с количеством разделов в табличном представлении для страницы напоминания о просмотре на основе количестваСохраняет в странице добавления напоминания:

Я нашел решение для создания ячеек на основе количества сохраненных напоминаний

это код:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)view
{
NSInteger numTableRecords = -1;
    sqlite3_stmt *statement;
    if (sqlite3_open([self.databasePath UTF8String], &remindersDB) == SQLITE_OK) 
    {
        NSString *sqlStatement = [NSString stringWithFormat: @"select count(*) from reminders"];
        const char *sql = [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding];
        if(sqlite3_prepare_v2(remindersDB, sql, -1, &statement, NULL) == SQLITE_OK) 
        {          
            while(sqlite3_step(statement) == SQLITE_ROW) 
            {
                numTableRecords = sqlite3_column_int(statement, 0);
            }
        }
        else 
        {
            printf("could not prepare statement: %s\n", sqlite3_errmsg(remindersDB));
        }
    }

    else 
    {
        NSLog(@"Error in Opening Database File");
    }
    sqlite3_close(remindersDB);
    return numTableRecords; 
}

Теперь моя проблема здесья могу получить данные, но не надлежащим образом. Я имею в виду, что это код, который я использовал для получения данных

if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellId] autorelease];
        view.backgroundColor = [UIColor clearColor];
        cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"reminderbutton.png"]];

        label1 = [[[UILabel alloc]initWithFrame:CGRectMake(26, 3, 30, 40)]autorelease];
        label1.backgroundColor = [UIColor clearColor];
        label1.textColor = [UIColor whiteColor];

        label2 = [[[UILabel alloc]initWithFrame:CGRectMake(45, 3, 100, 40)]autorelease];
        label2.backgroundColor = [UIColor clearColor];
        label2.textColor = [UIColor whiteColor];

        label3 = [[[UILabel alloc]initWithFrame:CGRectMake(119, 3, 100, 40)]autorelease];
        label3.backgroundColor = [UIColor clearColor];
        label3.textColor = [UIColor whiteColor];

        label4 = [[[UILabel alloc]initWithFrame:CGRectMake(198, 3, 120, 40)]autorelease];
        label4.backgroundColor = [UIColor clearColor];
        label4.textColor = [UIColor whiteColor];

        //Retrieve the values of database
        const char *dbpath = [self.databasePath UTF8String];
        sqlite3_stmt *statement;

        if (sqlite3_open(dbpath, &remindersDB) == SQLITE_OK)
        {
            NSString *querySQL = [NSString stringWithFormat:@"SELECT * from reminders ORDER BY id"];

            const char *query_stmt = [querySQL UTF8String];

            if (sqlite3_prepare_v2(self.remindersDB ,query_stmt , -1, &statement, NULL) == SQLITE_OK)
            {
                if (sqlite3_step(statement) == SQLITE_ROW)
                {
                    NSString *ID = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)]autorelease];

                    NSString *nameField = [[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]autorelease];                    

                    NSString *eventField = [[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)]autorelease];

                    NSString *dateField = [[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)]autorelease];

                    label1.text = ID;
                    label2.text = nameField;
                    label3.text = eventField;
                    label4.text = dateField;
                } 

                sqlite3_finalize(statement);
            }
            sqlite3_close(self.remindersDB);
        }


                    [cell addSubview:label1];
                    [cell addSubview:label2];
                    [cell addSubview:label3];
                    [cell addSubview:label4];

    }

    return cell;

Я вставил 4 напоминания, появляются 4 ячейки, нопроблема с отображением

Это выглядит следующим образом:

enter image description here

Как я могу последовательно отобразить 4 напоминания в 4 ячейках, я имею в виду первое напоминание на1-е, 2-е напоминание о 2-м и т. Д.

Пожалуйста, помогите мне решить эту проблему, спасибо всем заранее:)

Извините всех ... Я нашел полное решение длявопрос вследующая ссылка:

Извлечение всех строк, вставленных в базу данных sqlite, и отображение в ячейках табличного представления, содержащих метки в виде подпредставлений с различными разделами

Извините за вопрос ... Спасибо всемтот, кто просматривал это, возьмите его Если полезно

Следовательно, я не убираю этот вопрос, пока TC:)

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Я даю вам одно предложение, просто попробуйте. Я надеюсь, что это сработает.

Сделайте одно, просто извлеките данные из sqlite в viewDidAppear или viewWillAppear и сохраните данные в nsmutableArray.

Затем в - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section просто верните [yourArray count].

и для перезагрузки таблицы просто попробуйте с [self.tableview reloadData]

Я надеюсь, это будет работать. просто дайте мне знать для дальнейших разъяснений.

1 голос
/ 13 декабря 2011

для создания ячейки с этим требуемым цветом просто напишите следующий код в

cell.contentView.backgroundColor=[UIColor colorWithPatternImage:@"Give your cell image"]

в (UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath методе, а не в условии, вне условия вы должны поставить его. и почему вы работаете с базой данных в этом методе. это замедлит ваши приложения. дайте мне знать для любого разъяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...