在点击单元格时将值推送到新的ViewController

时间:2012-12-28 08:35:29

标签: objective-c ios xcode uitableview plist

我的表视图中填充了名为“Htgg”的plist。 我试图将值推送到名为“DetailViewController”的新视图。

这是代码:

#import "Glist.h"

#import "DetailViewController.h"

@implementation Glist
@synthesize htgg,detailViewController;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = NSLocalizedString(@"ofek", @"ofek");
    }
    return self;
}

- (void)viewDidLoad
{

    [super viewDidLoad];

    self.navigationItem.title = @"איך להוציא גימלים?";
    NSString *htggFile = [[NSBundle mainBundle]pathForResource:@"Htgg" ofType:@"plist"];
    htgg = [[NSDictionary alloc] initWithContentsOfFile: htggFile];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [htgg count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }


    id keys = [htgg allKeys];


    //Get all the keys in the first dictionary (the keys are: "good", "funny", "New - Item 3")
    //This is an array, so you can do this: array[0] (in C#)

    //Here we tell the tableview cell. to put in the text - [keys objectsAtIndex:indexPath.row]; if the row is 0, we will get: "good", if 1, we will get "funny"
    cell.textLabel.text = [keys objectAtIndex:indexPath.row];


    return cell;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return NO;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController *showPickedSolution = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:showPickedSolution animated:YES];


    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
@end

代码工作正常,但它不会推送行的值(plist的所有行都是字符串类型,而上面是'Root')。

我需要你的帮助才能将值推送到另一个视图(DetailViewController)。

3 个答案:

答案 0 :(得分:1)

DetailViewController中创建与您要推送的数据类型相同的属性,然后使用

DetailViewController *showPickedSolution = [[DetailViewController alloc]  
 initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];
 showPickedSolution.yourPropertName = [htgg objectAt:indexPath.Row];      

[self.navigationController pushViewController:showPickedSolution animated:YES];

您现在可以在您的财产中DetailViewController访问传递的数据。

请检查语法。

答案 1 :(得分:0)

要实现此目的,您可以在班级NSString中创建DetailViewController属性,并在didSelectRowAtIndexPath中设置该属性。以下是供您参考的代码:

showPickedSolution.valueToBeSent = [htgg valueForKey:[[htgg allKeys] objectAtIndex:indexPath.row]];

您可以在valueToBeSent课程中使用此DetailViewController

答案 2 :(得分:0)

我根据场景以两种不同的方式完成了这项工作:

1)委托,当我在表格上填写一些我希望传回原始屏幕的值时。

2)故事板Segue,当我想将某些值发送到第二个屏幕时。

我通常把我想要的所有值都放在一个数组中来发送对象然后在到达时我提取我需要的东西。

我可以将您推荐给iOS Dev Site的Getting Started部分,而不是解释每种方式。

我希望它有所帮助!