如何根据选择器视图中选择的行组件更新表视图数据

时间:2012-01-02 07:26:04

标签: iphone uitableview uipickerview

我有一个应用程序,我需要在一个页面中保存提醒,在其他显示中保存已提醒的提醒。我已成功使用sqlite3!

在视图提醒页面中,用户可以查看3个选项,查看我已经实现的所有选项,查看包含4组提醒的组。因为它们只是4组,我创建了4个4个视图控制器只需使用以下完美的查询:

 NSString *sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE grp = 'Friends'"];

但我查看每月页面有一个问题,其中包含选择器视图中的12个行组件供用户选择,即一年中的所有12个月:

我找到了检索特定月份中所有提醒的查询,比如12月份,我已使用以下查询检索:

NSString *sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-12-01' AND '2012-12-31'"];

在进入查看每月页面(控制器)之前,有一个月选择器视图,如前所述,我知道我们可以有单独的视图控制器页面来显示12个月的数据,就像我在查看组提醒,但代码变得忙乱。我希望表视图根据选择器视图(行组件)中选择的月份自动更新。

我发现了一个类似的问题,但问题没有答案!

Update table view data based on row component selected in picker view

我尝试创建一个类控制器的实例,其中为视图控制器提供了选择器视图,其中显示了数据:

ERViewEditController * viewEditController;

在检索时我使用了以下代码:

if(viewEditController.monthPicker selectedRowInComponent:0)
{
sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-01-01' AND '2012-01-31'"];
sql_stmt = [sqlQuery UTF8String];
}

else if(viewEditController.monthPicker selectedRowInComponent:1)
{
sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-02-01' AND '2012-02-31'"];
sql_stmt = [sqlQuery UTF8String];
}

等...等所有月份都使用以下代码进行显示:

if (sqlite3_prepare_v2(self.remindersDB, sql_stmt, -1, &statament, NULL) == SQLITE_OK) 
        {
            while (sqlite3_step(statament) == SQLITE_ROW) 
            {             
                ReminderClass *remin = [[ReminderClass alloc]init];

                remin.Name = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 1)]autorelease];
                remin.Event = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 2)]autorelease];
                remin.Date = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 3)]autorelease];

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

                [self.monthArray addObject:remin];
                [remin release];
            }

            sqlite3_finalize(statament);
        }

现在没有显示任何内容:(

如何达到要求,任何人都可以帮助我提出宝贵的建议!

提前感谢所有人:)

4 个答案:

答案 0 :(得分:1)

你应该只调用reloadData方法。

如果在.h文件中你有一个TableView对象

UITableView *table;

然后当你想更新你的桌子时,你应该写,

[table reloadData];

答案 1 :(得分:1)

  1. 选择PickerView行

  2. 将其保存到字符串

  3. 将此字符串访问到新的View Controller中,其中实现了UITableView委托方法

  4. cell.textLabel.text = str;其中str是您在pickerView

  5. 上选择的字符串
  6. 在新的View Controller方法中,您要访问字符串,写一行代码[table reloadData];

答案 2 :(得分:0)

通过在行中插入调试点来调试代码。

[self.monthArray addObject:remin];

然后,您应编写以下代码以符合您的数组为空或具有所需值。

for(int i=0;i<[self.monthArray count];i++)
{
NSLog("Array ids :%@",[self.monthArray ObjectAtIndex:i])
}

如果它在控制台中输出正确的值,那么你应该在委托方法cellForRowAtIndex中写下以下行。

cell.textLabel.text = [self.monthArray objectAtIndex:indexPath.row];

答案 3 :(得分:0)