使用UITableView将NSDictionary传递给另一个控制器

时间:2017-10-13 12:07:27

标签: ios objective-c uitableview

我有这个NSDictionary:

{
   Name =
   (
     "Lucas",
     "Tom"
  );
    Surname = 
  (
    "Jhon",
    "Smith"
    "Hop"
);

名称是简单的NSArray,姓氏是NSMutableArray

好了,我的问题是:

从这本词典开始,我必须在UITableView中显示NSDictionary每个元素的关键字。例如,在这种情况下,UITableView会有两个项目,一个叫名称,另一个叫姓氏

当我点击UITableView的一个元素时,我将不得不转到另一个控制器,它将显示所点击单元格的所有数据。例如,如果我点击Surname,当我打开新控制器时,我必须得到它像 Jhon Smith Hop

首先,我尝试在所有键之前显示UITableView:

self.KeyArray = [myDictionary allKeys];

并在cellForRowAtIndexPath方法中:

cell.textLabel.text = [self.KeyArray objectAtIndex: indexPath.row];

但这是一种错误的方法,因为我将丢失与该特定密钥相关的所有信息。你知道我怎么做吗?

3 个答案:

答案 0 :(得分:3)

您可以使用委托将NSMutableArray发送到另一个控制器。

让我们说你的第一个视图控制器是" A"它有姓名和姓氏密钥。第二个控制器是" B"哪个将包含您要发送的数组 现在,  1.在A控制器中创建协议  2.创建该协议的委托对象  3.在控制器中创建1个方法,该控制器可以具有参数Like: - (NSMutableArray *)
 4.将该协议实施到B控制器中  5.声明控制器B中您在控制器A中定义的方法  6.在didSelectRowAtIndexPath中使用委托对象调用该方法,并在该方法中传递该对象。
 7.现在,您在该方法中拥有NSMutableArray,并且可以自由使用该值。

答案 1 :(得分:2)

您可以在didSelectRowAtIndexPath下面写下代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSString *keyOfMainDic = [self.KeyArray objectAtIndex:indexPath.row]; // in the keyOfMainDic, you will get selected key name of your main dictionary
  NSMutableArray *temArray = [yourMaindict objectForKey:keyOfMainDic] // You will get array of specific key.

 // Here you just need to pass "temArray" to your destination controller.
}

答案 2 :(得分:1)

首先,您应该从视图控制器中为您的详细控制器定义具有tableview的segue,并在storyboard中为其指定标识符。

然后在KeyArray类型继承的详细控制器头中定义一个属性。

之后,只需在下面编写代码即可。这只是建议,请使用您的阵列的模型而不是字典。

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

   self.KeyArrayItem = [self.KeyArray objectAtIndex:indexPath.row];
   [self performSegueWithIdentifier:@"yourSegueID" sender:self.KeyArrayItem];

}


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    AnotherController *controller = segue.destinationViewController;
    controller.KeyArrayItem = sender;

}