我有一个表格视图。我希望我的应用能够像 iPhone 上的“通讯录”应用一样工作。当您在应用程序中选择一个人时,它会转到一个包含用户名和电话号码的视图。选择哪个单元格无关紧要,它总是进入相同的视图,但数据不同。我怎样才能达到同样的目的?我想要一个视图控制器,并且我希望每个单元格将某些数据加载到呈现的视图控制器上!我想使用 NSUserDefaults (如果可能的话)。任何帮助都会很棒,谢谢!
PS我知道这是一个广泛的问题,但我不确定在哪里可以找到我搜索过的答案。再次感谢!
您创建一个名称(字符串)数组并在表格视图中显示这些名称。然后,一旦选择了名称,您就可以将其作为字符串保存在 NSUserDefaults 中。
- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath
{
NSString *selectedString = [namesArray objectAtIndex:[indexPath row]];
NSUserDefaults *infoSaved = [NSUserDefaults standardUserDefaults];
[infoSaved setObject:selectedString forKey:@"theName"];
[infoSaved synchronize];
[self performSegueWithIdentifier:@"segueToMoreInfo" sender:self];
}
然后在您的第二个视图控制器中,您从包含 NSDictionary 项的 NSDictionary 加载信息。
-(void) loadData {
NSUserDefaults *infoSaved = [NSUserDefaults standardUserDefaults];
NSString *theName = [infoSaved objectForKey:@"theName"];
NSDictionary *currentNameToDisplay = [itemsDictionary objectForKey:theName];
// then you can set your labels with information in that NSDictionary item
[nameLabel setString:[currentNameToDisplay objectForKey:@"userName"];
[ageLabel setString:[currentNameToDisplay objectForKey:@"userAge];
}
那将是一个简单的基本结构。您可以将包含项目的主要名称 NSDictionary 保存到 plist 文件中,或者更好地将字典保存在 NSUserDefaults 中。
希望有帮助。
我想要一个视图控制器,并且我希望每个单元格将某些数据加载到呈现的视图控制器上!
没问题。用户点击单元格,您的表的代表会收到一条-tableView:didSelectRowAtIndexPath:
消息。假设表的委托和数据源都是管理表的视图控制器(因为这是一个非常常见的设置)。因此视图控制器查看单元格的索引路径,从它保存其数据的任何位置获取相关数据,使用连接到点击单元格的数据实例化详细视图控制器,然后推送它。
您可能缺少的部分是存储表中显示的数据的某种模型。表的视图控制器需要了解模型,因为它是表的数据源。它已经需要知道在哪里可以找到足够的数据来配置表格中的每个单元格。如果您使用相同的模型来存储详细数据,您将能够使用它来配置详细视图控制器。
示例:假设您有一张只有一个部分的表格。该表的简单模型可以是字典数组。当您的表格视图控制器需要填充单元格时,它使用row
索引路径的索引作为数组的索引来获取字典,并使用它来设置单元格。当用户点击一个单元格时会发生完全相同的事情:您使用row
从索引路径从数组中获取正确的字典,然后使用它来设置详细视图控制器。你甚至可以将整个字典传递给细节视图控制器,让细节视图控制器得到它需要的东西。这样,表格视图控制器就不必担心详细视图控制器显示的具体细节。