如何在执行编辑操作时启用表视图单元格的编辑内容

时间:2012-01-03 14:47:31

标签: iphone uitableview edit

大家好,我祝新年快乐!

我有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 个答案:

答案 0 :(得分:1)

在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;
  }