1

我有一个基于视图的应用程序,它包含以下文件

  1. 有一个按钮的主视图控制器

  2. 显示视图控制器,它将以表格的形式显示一组国家

  3. 状态视图控制器将再次以表格的形式显示在第二步中选择的国家的一组状态

它是按钮 --> 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国家的值传递给状态视图控制器,以便我可以访问各个国家的所有相应状态?(注意:我还没有为状态创建所有数组,只是创建了两个来检查。)

4

2 回答 2

0

首先为什么要在显示视图控制器的 didSelectRowAtIndexPath 中比较 indexPath?你也可以这样写代码。如果您只想传递 indexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //UITableViewCell *thiscell=[tableView cellForRowAtIndexPath:indexPath];
    states *detailViewController = [[states alloc] initWithNibName:@"states" bundle:nil];
    //Pass the selected object to the new view controller.
    detailViewController.m_SelectedIndexPath=indexPath;
    [self.navigationController pushViewController:detailViewController  animated:YES];        [self presentModalViewController:detailViewController animated:YES];
    [detailViewController release];

[tableView deselectRowAtIndexPath:indexPath animated:NO];
 }

在 states.m, cellForRowAtIndexPath 中,您可以像这样检查 m_SelectedIndexPath:

- (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(m_SelectedIndexPath == 0)
 {
     cell.textLabel.text=[state objectAtIndex:indexPath.row];
 }
  else if(m_SelectedIndexPath==1)
 {
     cell.textLabel.text=[state1 objectAtIndex:indexPath.row];
 }
  return cell;
 }

您正在推动的第二件事以及呈现 tableview.You 应该推动或呈现。

于 2012-06-04T12:27:53.277 回答
0

嘿,只需在国家视图的 didSelectRowAtIndexPath 委托方法中使用 stateView 的 setTableArray ...

setTableArray 方法如下:

-(void)setTableArray:(NSMutableArray *)arr
{
    arrData = arr;
    [arrData retain];
    //[tblView reloadData];
}

这里 arrData 是 MutableArray ....

当您当时从didSelectRowAtIndexPath 推送 stateView 时,只需像下面这样设置 aaray ...

[detailViewController setTableArray:yourArray];

在这里,您只需获取具有选定国家/地区索引的数据并传递该数组 insted yourArray ...希望,这对您有帮助... :)

于 2012-06-04T12:24:18.243 回答