如何使用按钮单击的历史创建UITableView

时间:2012-06-25 04:24:17

标签: xcode list uitableview button history

我正在创建一个应用程序,应该列出单击按钮的日期和时间,并将列表放在UITableView中。我的想法是每次用户点击按钮时获取日期和时间戳,然后在单击按钮时将其保存在每个时间和日期的字典对象数组中。我还有另一个按钮,它只是加载一个模态视图,显示所述UITableView以及按钮点击历史列表。

我能够部分地使用我的表填充数组中的字典条目数。问题是,它总是以所有条目的相同时间和日期结束。

这是最初有一个条目的表格截图。 enter image description here

这就是我多次点击按钮时会发生什么。它显示所有行的更新时间。 enter image description here

如何在表格中显示历史记录并阻止其更新?我只是在保存数据时使用NSUserDefaults。

以下是Button Clicked方法中的一些代码:

- (IBAction)btnClicked:(id)sender
{
    NSLog(@"Button pressed");

    // Gets the current time and formats it
    NSDate *timeNow = [NSDate date];
    NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
    [timeFormatter setDateFormat:@"HH:mm a"];

    // Gets the current date and formats it
    NSDate *dateNow = [[NSDate alloc] init];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MMM dd, yyyy"];

    NSString *currentTime = [timeFormatter stringFromDate:timeNow];
    NSString *currentDate = [dateFormatter stringFromDate:dateNow];
    NSString *timestamp = currentTime;
    NSString *date = currentDate;

    // This is where values gets saved
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:timestamp       forKey:@"TimeStamp"];
    [defaults setObject:date            forKey:@"Date"];
    [defaults synchronize];

    NSString *time = [defaults objectForKey:@"TimeStamp"];
    NSString *dateToday = [defaults objectForKey:@"Date"];

    tableVC.tableDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:time, @"Time", dateToday, @"Date", nil];

    [tableVC.tableArray addObject:tableVC.tableDict];
    [tableVC.table reloadData];
}

这是我的viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *time = [defaults objectForKey:kTimeStampText];
    NSString *date = [defaults objectForKey:kDateText];

    tableDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:time, @"Time", date, @"Date", nil];

    tableArray = [[NSMutableArray alloc] initWithObjects:tableDict, nil];
}

这是我的表方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [tableArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomCell *customCell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
    if (customCell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" 
                                                     owner:self 
                                                   options:nil];
        for (id oneObject in nib) if ([oneObject isKindOfClass:[CustomCell class]])
            customCell = (CustomCell *)oneObject;
    }

    customCell.dateLbl.text = [tableDict objectForKey:@"Date"];
    customCell.timeLbl.text = [tableDict objectForKey:@"Time"];

    return customCell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 74;
}

1 个答案:

答案 0 :(得分:0)

好的我认为我发现了您的问题,您正在访问每个表格行的相同日期。

customCell.dateLbl.text = [tableDict objectForKey:@"Date"];
customCell.timeLbl.text = [tableDict objectForKey:@"Time"];

不正确

NSDictionarry *dict = [tableArray objectAtIndex:[indexPath row]];
customCell.dateLbl.text = [dict objectForKey:@"Date"];
customCell.timeLbl.text = [dict objectForKey:@"Time"];

现在应该很好地循环并打印所有日期。

你所拥有的代码的问题是为tableview中的每一行调用了索引路径方法的行,即它就像一个循环,所以你在它上面分配每个单元格属性,希望这个有道理。