Как создать UITableView с историей нажатий кнопок
Я создаю приложение, в котором должна быть указана дата и время нажатия кнопки и помещен список в 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;
}
1 ответ
Хорошо, я думаю, что нашел вашу проблему, у вас есть одна и та же дата для каждой строки таблицы.
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"];
Теперь это должно красиво пройтись по ней и распечатать все даты.
Проблема с вашим кодом заключалась в том, что строка для метода index path вызывается для каждой строки в табличном представлении, то есть это похоже на цикл, поэтому вы присваиваете каждой ячейке свойства самостоятельно, надеюсь, это имеет смысл.