我有一个基于视图的应用程序,它包含以下文件
有一个按钮的主视图控制器
显示视图控制器,它将以表格的形式显示一组国家
状态视图控制器将再次以表格的形式显示在第二步中选择的国家的一组状态
它是按钮 --> countries(tableview)并在选择一个单元格后--> states(tableview)。
好吧,一切正常,除了当我单击特定国家/地区时无法导航到这些国家/地区的州。例如。如果我选择 AUS,那么我不会得到 AUS 的状态。
代码如下。
有一个按钮的主视图控制器:
.h 文件
{
IBOutlet UIButton *btn;
}
-(IBAction)click;
.m 文件
-(IBAction)click
{
display *dis=[[display alloc]initWithNibName:@"display"bundle:nil];
[self presentModalViewController:dis animated:YES];
}
显示视图控制器
.h 文件
@interface display : UITableViewController
{
NSArray *countries;
}
@property(nonatomic,retain)NSArray *countries;
@end
display.m 文件
- (void)viewDidLoad {
NSArray *count=[[NSArray alloc] initWithObjects:@"India",@"USA",@"UK",@"AUS",@"SA",@"PAK",@"BANGLADESH",nil];
self.countries=count;
[count release];
self.countries=count;
self.title=@"Select a Country";
[super viewDidLoad];
}
- (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 [countries count];
}
// Customize the appearance of table view cells.
- (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] autorelease];
}
// Configure the cell...
//countries=
cell.textLabel.text=[countries objectAtIndex:indexPath.row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic may go here. Create and push another view controller.
//UITableViewCell *thiscell=[tableView cellForRowAtIndexPath:indexPath];
if(indexPath.row==0)
{
states *detailViewController = [[states alloc] initWithNibName:@"states" bundle:nil];
// ...
// Pass the selected object to the new view controller.
//detailViewController.indexPath=self.indexPath;
//self.dis.indexValue=indexPath;
[self.navigationController pushViewController:detailViewController animated:YES];
//detailViewController.indexPath=self.indexPath;
[self presentModalViewController:detailViewController animated:YES];
[detailViewController release];
}
if(indexPath.row==1)
{
states *detailViewController = [[states alloc] initWithNibName:@"states" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[self presentModalViewController:detailViewController animated:YES];
UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath];
[detailViewController release];
}
[tableView deselectRowAtIndexPath:indexPath animated:NO];
}
这里的statesenter代码控制器
states.h 文件
@interface states : UITableViewController {
NSArray *state;
NSArray *state1;
NSArray *state2;
//NSIndexPath *indexPath;
}
@property(nonatomic,retain) NSArray *state;
@property(nonatomic,retain) NSArray *state1;
@property(nonatomic,retain) NSArray *state2;
//@property(nonatomic,retain)display *dis;
//@property(nonatomic,retain)NSIndexPath *indexPath;
@end
states.m 文件
- (void)viewDidLoad {
NSArray *sta=[[NSArray alloc]initWithObjects:@"goa",@"ap",@"karnataka",nil];
self.state=sta;
[sta release];
self.state=sta;
[super viewDidLoad];
NSArray *sta1=[[NSArray alloc]initWithObjects:@"Los Angeles",@"California",@"Las Vegas",nil];
self.state1=sta1;
[sta release];
self.state1=sta1;
[super viewDidLoad];
NSArray *sta2=[[NSArray alloc]initWithObjects:@"Southhampton",@"Nottingham",@"London",nil];
self.state2=sta2;
[sta release];
self.state2=sta2;
[super viewDidLoad];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [self.state count];
}
// Customize the appearance of table view cells.
- (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] autorelease];
}
// Configure the cell...
if(indexPath.row==0)
{
cell.textLabel.text=[state objectAtIndex:indexPath.row];
}
else if(indexPath.row==1)
{
cell.textLabel.text=[state1 objectAtIndex:indexPath.row];
}
return cell;
}
因此,当我运行此代码时,它运行良好,但每当我选择任何国家时,我都会得到南安普顿和加利福尼亚。
我不想为所有状态创建多个视图控制器,这样做是愚蠢的。所以我创建了一个数组并使用 states 视图控制器来显示所选国家/地区的不同 states 数组。
我应该如何将indexpath
国家的值传递给状态视图控制器,以便我可以访问各个国家的所有相应状态?(注意:我还没有为状态创建所有数组,只是创建了两个来检查。)