有没有人知道任何有关如何推送到新细节视图的教程。现在我有2个TableView,第一个TableView保存状态,第二个TableView保存区域名称。从第二个TableView我希望能够按下一个区域并在DetailView中显示信息,但我不确定如何将这些信息传递给DetailView。
RootTableViewController.h
#import <UIKit/UIKit.h>
@interface RootTableViewController : UITableViewController
@end
RootTableViewController.m
#import "RootTableViewController.h"
#import "SecondTableViewController.h"
@interface RootTableViewController ()
@end
@implementation RootTableViewController
{
NSMutableArray *states;
}
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
states = [NSMutableArray arrayWithObjects:@"Alabama", @"Georgia", @"Tennessee", nil];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [states count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"StatesCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.text = [states objectAtIndex:indexPath.row];
return cell;
}
SecondTableViewController.h
#import <UIKit/UIKit.h>
@interface SecondTableViewController : UITableViewController
{
NSMutableArray *listOfStates;
}
@property (retain, atomic) NSMutableArray *listOfStates;
@property (nonatomic, strong) NSString *stateName;
@end
SecondTableViewController.m
#import "SecondTableViewController.h"
#import "RootTableViewController.h"
@interface SecondTableViewController ()
@end
@implementation SecondTableViewController
@synthesize listOfStates = _listOfStates;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_listOfStates = [NSDictionary dictionary];
_listOfStates =
@{
@"Alabama":@[
@{@"area":@"albama area 1", @"description":@"Alabama specs 1"},
@{@"area":@"albama area 2", @"description":@"Alabama specs 2"},
@{@"area":@"albama area 3", @"description":@"Alabama specs 3"},
],
@"Georgia":@[
@{@"area":@"Georgia area 1", @"description":@"Georgia specs 1"},
@{@"area":@"Georgia area 2", @"description":@"Georgia specs 2"},
@{@"area":@"Georgia area 3", @"description":@"Georgia specs 3"}
],
@"Tennessee":@[
@{@"area":@"Tennessee area 1", @"description":@"Tennessee specs 1"},
@{@"area":@"Tennessee area 2", @"description":@"Tennessee specs 2"},
@{@"area":@"Tennessee area 3", @"description":@"Tennessee specs 3"}
]
};
NSArray *state = [_listOfStates objectForKey:_stateName];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.state count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"Animal2Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
cell.textLabel.text = [[self.state objectAtIndex:indexPath.row] objectForkey:@"area"];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"detailSegue" sender:sender];
}
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"detailSegue"])
{
//get the specs
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSString *specs = [_informationSpecs objectAtIndex:indexPath.row];
//set the specs
DetailViewController *detailVC= (DetailViewController *)segue.destinationViewController;
detailVC.description= [[self.state objectAtIndex:indexPath.row] objectForkey:@"description"];
}
}
@end
错误
SecondTableViewController.m:43:10: Expected ':'
SecondTableViewController.m:58:37: No visible @interface for 'NSDictionary' declares the selector 'obejectForKey:'
SecondTableViewController.m:67:9: Use of undeclared identifier 'didReceiveMemoryWarning'
感谢任何指导。
答案 0 :(得分:1)
您应该将数据放在一起,而不是为每个州建立数组,因为它们是相关的。
国家/地区列表:
_listOfStates =
@{
@"Alabama":@[
@{@"area":@"albama area 1", @"description":@"Alabama specs 1"},
@{@"area":@"albama area 2", @"description":@"Alabama specs 2"},
@{@"area":@"albama area 3", @"description":@"Alabama specs 3"},
],
@"Georgia":@[
@{@"area":@"Georgia area 1", @"description":@"Georgia specs 1"},
@{@"area":@"Georgia area 2", @"description":@"Georgia specs 2"},
@{@"area":@"Georgia area 3", @"description":@"Georgia specs 3"}
],
@"Tennessee":@[
@{@"area":@"Tennessee area 1", @"description":@"Tennessee specs 1"},
@{@"area":@"Tennessee area 2", @"description":@"Tennessee specs 2"},
@{@"area":@"Tennessee area 3", @"description":@"Tennessee specs 3"}
]
};
状态数组:
self.state = [_listOfStates objectForKey:_stateName];
<强> numberOfRowsInSection 强>
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.state count];
}
<强>的cellForRowAtIndexPath 强>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"Animal2Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
cell.textLabel.text = [[self.state objectAtIndex:indexPath.row] objectForkey:@"area"];
return cell;
}
<强> didSelectRowAtIndexPath方法强>
-(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[self performSegueWithIdentifier:@"detailSegue" sender:sender];
}
<强> prepareForSegue 强>
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"detailSegue"])
{
//get the specs
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSString *description = [[self.state objectAtIndex:indexPath.row] objectForkey:@"description"];
//set the specs
DetailViewController *detailVC= (DetailViewController *)segue.destinationViewController;
detailVC.description= description;
}
}
答案 1 :(得分:0)
在详细信息视图中实现一个方法,该方法接收已更改的数据并相应地更新局部变量(如果有)并更新视图。 从主视图控制器调用该方法。