我正在创建一个应用程序,应该列出单击按钮的日期和时间,并将列表放在UITableView中。我的想法是每次用户点击按钮时获取日期和时间戳,然后在单击按钮时将其保存在每个时间和日期的字典对象数组中。我还有另一个按钮,它只是加载一个模态视图,显示所述UITableView以及按钮点击历史列表。
我能够部分地使用我的表填充数组中的字典条目数。问题是,它总是以所有条目的相同时间和日期结束。
这是最初有一个条目的表格截图。
这就是我多次点击按钮时会发生什么。它显示所有行的更新时间。
如何在表格中显示历史记录并阻止其更新?我只是在保存数据时使用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;
}
答案 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中的每一行调用了索引路径方法的行,即它就像一个循环,所以你在它上面分配每个单元格属性,希望这个有道理。