我工作的一组程序员,我有一个带有TableViewController的故事板,它显示了我们从日期选择器编码的UILocalNotifications列表。它们都有不同的时间,每次提醒设置和提醒文本时,时间戳都会显示在tableview单元格中。目前,提醒按时间顺序显示(它们的设置顺序)。一旦localNotification被触发,具有旧提醒的单元格将自动清除。到目前为止,所有这些都取得了成功。
问题在于最后一个小功能。由于正在制作的提醒应用程序旨在可自定义,我们希望用户能够移动单元格。我们作为一个小组成功地允许用户编辑订单,但是面临另一个困境。一旦订单被更改并且用户离开视图(应用程序是基于导航栏)并返回到视图,订单已默认回原始订单,而不是他们从移动单元格输入的自定义订单。
所以,这是一个问题(希望我的代码如下我们在tableview中输入数据将提供一些上下文)。我的小组想知道,我们如何根据列表保存和加载表中用户修改过的单元格的位置。正如您在我们的代码中所注意到的那样,通过调用UILocalNotification类,提醒列表完全按时间顺序排列。我们应该获取每个单独单元格的参数并将它们保存到数组中,然后以某种方式加载它们吗?对此问题的反馈将不胜感激。我还提供了几个屏幕截图,希望能让您了解最终用户方面的情况。
我们作为一个组输入了参数进行编辑,如下所示:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
我们还有以下内容允许移动表格单元格:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
支持重新排列tableview单元格。这是输入保存位置代码的最佳方法吗?是否可以保存和加载表的状态的UITableView的任何属性?此外,如果我们需要将本地通知转换为字符串形式,那么这样做的语法是什么? <<这些子问题应该引导我发现难以表达的原始问题。
这是将信息输入tableview的方式。添加了一些适用的注释。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Get list of local notifications
NSArray *localNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
UILocalNotification *localNotification = [localNotifications objectAtIndex:indexPath.row];
// Display notification info
NSDate *date = localNotification.fireDate;
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"dd/MM/yyyy"];
NSString *dateFormatter = [formatter1 stringFromDate:date];
NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"EEEE hh:mm"];
NSString *dateFormatter2 = [formatter2 stringFromDate:date];
NSString *on = [dateFormatter2 stringByAppendingString:@" on the "];
NSString *final = [on stringByAppendingString:dateFormatter];
[cell.textLabel setText:localNotification.alertBody];
if (final.length != 8) {
[cell.detailTextLabel setText:final];
}
else {
[cell.detailTextLabel setText:@""];
}
return cell;
}
就应用的截图而言。这就是我们所拥有的。我们有一个编辑参数,并且在带有导航栏的tableviewcontoller中设置了单元格。主视图(如最上面的屏幕截图所示)是输入文本的位置。然后在选择日期选择器日期(或预设)时将其作为UIlocalnotification输入
感谢您抽出宝贵时间回答这个问题。
答案 0 :(得分:1)
问题是您在加载视图之前从UIApplication加载数组,因此重新排列数组后所做的任何更改都将丢失。我建议你用这种方法保存重新排列的数组:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
// rearrange arrayNotifications
// then set it to [UIApplication sharedApplication] again
[[UIApplication sharedApplication] setScheduledLocalNotifications:arrayNotifications];
}
答案 1 :(得分:1)
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
NSString * firstObject = localnotificationarray[fromIndexPath];
[localnotificationarray replaceObjectAtIndex: fromIndexPath withObject:localnotificationarray[toIndexPath]];
[localnotificationarray replaceObjectAtIndex: toIndexPath withObject: firstObject];
}