我有一个表格视图。我希望我的应用程序像iPhone上的“联系人”应用程序一样工作。当您在应用程序中选择某个人时,它将转到包含用户名和电话号码的视图。并且无论选择哪个单元格都无关紧要,它始终会转到相同的视图,但具有不同的数据。我怎样才能实现同样的目标? 我想要一个视图控制器,我希望每个单元格将某些数据加载到呈现的视图控制器!我想使用NSUserDefaults(如果可能的话)。任何帮助都会很棒,谢谢!
P.S。我知道这是一个广泛的问题,但我不确定在哪里找到我搜索和搜索的答案。再次感谢!
答案 0 :(得分:0)
我想要一个视图控制器,我希望每个单元格加载某些数据 到现有的视图控制器上!
没问题。用户点击单元格,您的表的委托会收到-tableView:didSelectRowAtIndexPath:
消息。假设表的委托和数据源都是管理表的视图控制器(因为这是一种非常常见的设置)。因此,视图控制器会查看单元格的索引路径,从其保存数据的任何位置获取关联数据,使用连接到tapped单元格的数据实例化详细视图控制器,然后将其推送。
您可能缺少的部分是某种存储表格中显示的数据的模型。表的视图控制器需要知道模型,因为它是表的数据源。它已经需要知道在哪里可以找到足够的数据来配置表中的每个单元格。如果您使用相同的模型来存储详细信息数据,您将能够使用它来配置详细信息视图控制器。
示例:假设您的表只有一个部分。该表的简单模型可以是字典数组。当表视图控制器需要填充单元格时,它使用索引路径的row
作为数组的索引来获取字典,并使用它来设置单元格。当用户点击一个单元格时,会发生完全相同的事情:您使用索引路径中的row
从阵列中获取正确的字典,然后使用它来设置详细视图控制器。您甚至可以将整个字典传递给详细视图控制器,让详细视图控制器获得所需的内容。这样,表视图控制器就不必担心详细视图控制器显示的具体细节。
答案 1 :(得分:0)
您可以创建一个名称(字符串)数组,并在表视图中显示这些名称。 然后,一旦选择了名称,就将其作为字符串保存在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中。
希望有所帮助。