停留在第3层的分层表视图数据

时间:2015-08-07 18:33:18

标签: ios objective-c uitableview

我正在开发使用故事板并使用两个UITableView和一个标签UIViewController的应用。此应用程序从.plist文件中获取数据。我能够从第一个表中的.plsit show中检索数据,并根据第二个表中显示的所选行数据,但是当我单击查看详细信息第二个表时,我只能查看一个数组字符串,无法查看其他数据字符串。这是低估的样本。 A> AA> AAA和B> BB> BBB。

我在第一个表中有三个主题木材穿刺,尿道导尿和静脉穿刺。现在,当我点击每个单元格时,它会根据单元格在第二个UITableView中显示数据。让我们假设向我展示以下数据:

  

介绍
  指示
  设备
  等

现在当我点击我的Lumber穿刺数据的介绍时,它会显示.plist数组数据中的木材穿孔细节。但如果我点击第二个数据单元上的尿导管插入术,它还会显示第一个Lumber穿刺细节。那么我该如何解决这个问题呢?请帮助我详细解答,因为我是开发iOS应用程序的新手。感谢

这是第一个表的一些代码,并将数据传递给第二个表。

@implementation ViewController
{
    NSArray *tableData;
    NSArray *Components_Procedure;
}

@synthesize tableView1;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Find out the path of recipes.plist
    NSString *path = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"plist"];    

    // Load the file content and read the data into arrays
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
    tableData = [dict objectForKey:@"Procedure"];
    Components_Procedure = [dict objectForKey:@"Component"];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [tableData count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

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

    return cell;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"Procedure"]) {
        NSIndexPath *indexPath = [self.tableView1 indexPathForSelectedRow];
        Components *destViewController = segue.destinationViewController;
        destViewController. componentArray= [Components_Procedure objectAtIndex:indexPath.row];
    }
}
@end

第二个表格代码并将详细数据传递给UIViewcontrollers UILables

@implementation Components
{
    NSArray *detail;
}

@synthesize tableView2;
@synthesize componentArray;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Find out the path of recipes.plist
    NSString *path = [[NSBundle mainBundle] pathForResource:@"recipes" ofType:@"plist"];    

    // Load the file content and read the data into arrays
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
    detail = [dict objectForKey:@"LumberPuncture"];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [componentArray count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

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

    return cell;
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"Detail"]) {
        NSIndexPath *indexPath = [self.tableView2 indexPathForSelectedRow];
        DetailView *destViewController = segue.destinationViewController;
        destViewController.headerName = [componentArray objectAtIndex:indexPath.row];
        destViewController.contentName = [detail objectAtIndex:indexPath.row];
    }

}
@end

和详细UIViewController

#import "DetailView.h"

@implementation DetailView

@synthesize headerLabel;
@synthesize headerName; 
@synthesize contentLabel;
@synthesize contentName;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Set the Label text with the selected recipe
    headerLabel.text =  headerName;
    contentLabel.text =  contentName;
}

@end

1 个答案:

答案 0 :(得分:0)

你需要使用这两种方法,在didSelectRowAtIndexPath中你应该调用[self performSegueWithIdentifier:@" identifier"发件人:自];

在同一个View Controller中,你应该让prepareForSegue方法获取destinationViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath (NSIndexPath *)indexPath
{
  self.someProperty = [self.someArray objectAtIndex:indexPath.row];
 [self performSegueWithIdentifier:@"segueID" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  UIViewController *vcToPushTo = segue.destinationViewController;
  vcToPushTo.propertyToSet = self.someProperty;
 }

只需添加此方法:

– tableView:didSelectRowAtIndexPath:

通常,您使用“didSelectRowAtIndexPath”方法(在用户选择行后调用)来处理行选择,这是您添加代码以指定选择行时的操作的位置。

这和" willSelectRowAtIndexPath"方法用于行选择。唯一的区别是当要选择指定的行时调用“willSelectRowAtIndexPath”。通常,您可以使用此方法来防止选择特定单元格。