Как включить редактирование содержимого ячейки табличного представления при выполнении действия редактирования - PullRequest
0 голосов
/ 03 января 2012

Привет всем, и я желаю очень счастливого нового года!

У меня есть 2 контроллера представления, один, где пользователь заполняет все поля в табличном представлении и нажимает кнопку Сохранить, данные вставляются в таблицу базы данных sqlite. Я уже успешно вставил, обновил, получил данные из таблицы базы данных sqlite. .

Другой контроллер просмотра, где пользователь может просматривать сохраненные данные (Мой случай: напоминание). Я успешно отобразил сохраненные данные, т.е. когда я сохраняю напоминание, на странице напоминания о просмотре добавляется ячейка, и отображается напоминание, сохраненное в экземпляре, аналогично для каждого сохраненного напоминания и т. д. ...

Пользователь может быть заинтересован и нуждаться в редактировании содержимого, которое он / она сохраняет. Так что я поместил кнопку редактирования и реализовал ориентацию и удаление ячейки, но как я могу отредактировать ячейку, т.е. как заставить ячейку перейти на страницу добавления напоминания, где сохраняются данные для этого экземпляра (напоминания) при выборе пользователем ячейки (в моем случае: разделы с одной строкой).

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

Чтобы пользователь мог внести изменения в напоминание, например, номер телефона, дату, текст сообщения и т. Д. ... или что бы то ни было.

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

Вот как я получал напоминания на основе сохранений пользователя на странице добавления напоминания:

-(void)loadgReminders
{
    self.frndsArray = nil;
    self.frndsArray = [[NSMutableArray alloc]init];

    //Retrieve the group of reminder
    const char *thePath = [self.databasePath UTF8String];
    sqlite3_stmt *statment;

    if (sqlite3_open(thePath, &remindersDB) == SQLITE_OK)
    {
    NSString *getQuery = [NSString stringWithFormat:@"SELECT * FROM reminders WHERE Grp = 'Family'"];
        const char *sqlite_stmt = [getQuery UTF8String];

        if (sqlite3_prepare_v2(self.remindersDB, sqlite_stmt, -1, &statment, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(statment) == SQLITE_ROW) 
            {
                ReminderClass *remind = [[ReminderClass alloc]init];
                remind.Name = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 1)];
                remind.Event = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 2)];
                remind.Date = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statment, 3)];

                NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease];
                [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
                NSDate *date = [dateFormat dateFromString:remind.Date];
                [dateFormat setDateFormat:@"MMMM dd"];
                NSString *dateVal = [dateFormat stringFromDate:date];
                remind.Date = dateVal;

                [self.frndsArray addObject:remind];

                [remind release];
            }

            sqlite3_finalize(statment);
        }

        sqlite3_close(remindersDB);
    }
}

Пожалуйста, помогите мне с ценными предложениями

Спасибо всем заранее:)

1 Ответ

1 голос
/ 03 января 2012

В методе делегата tableview:

 cellForRowAtIndexPath:  

вы получаете доступ к члену вашего frndsArray.Точно так же, когда пользователь выбирает строку, для вашего делегата вызывается

 didSelectRowAtIndexPath: 

.

Просто получите доступ к тому же члену frndsArray (обычно с помощью indexPath.row) и передайте этот объектк вашей детализации / редактированию viewController, либо в его методе init, либо путем установки iVar.

Если вы хотите реализовать операцию SAVE в контроллере подробного представления, вам также нужно будет передать первичный ключ в подробный VC, чтобы он мог выполнить обновление sql на основе этого ключа.

РЕДАКТИРОВАТЬ: псевдокод:

 -(void) tableView:(UITableView *)tableview didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     ReminderClass *rem = (ReminderClass *)[self.frndsArray objectAtIndex:indexPath.row];

     // Instantiate your detail/editor view controller,
     // and pass in the ReminderClass object to be edited.
     ReminderDetailViewController *rdvc = [[ReminderDetailViewController alloc] initWithReminder: rem];
     [self.navigationController pushNavigationController:rdvc animated:YES];
     [rdvc release];
 }

РЕДАКТИРОВАТЬ 2: больше псевдо-кода (вам нужно будет также выполнить #import и @synthesize и dealloc)

В ReminderDetailViewController.hдобавьте это:

 @property(nonatomic, retain) ReminderClass *myLocalReminderInstance;

В ReminderDetailViewController.m добавьте этот метод инициализатора:

 -(id) initWithReminder:(ReminderClass *)aReminder {
       if ( (self=[super init]) ) {
            self.myLocalReminderInstance = aReminder;
       }
       return self;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...