我正在开发使用故事板并使用两个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
答案 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”。通常,您可以使用此方法来防止选择特定单元格。