如何从导航控制器中的viewcontrollers堆栈中获取特定的视图控制器?

时间:2012-08-15 08:15:38

标签: iphone ios ipad

我有一个应用程序,其中我有一个表格视图。当按下单元格上的按钮时,我必须转到另一个视图控制器(即:testviewcontroller)显示我在上一个选择的内容。然后按下一个按钮我需要去另一个视图控制器显示剩余的值。如果他选择一个然后我需要重复上面的过程。问题是从这里我也携带一些值到testviewcontroller.if我回弹到我的视图控制器我怎样才能携带新的价值。目前我正在这样做。

TestViewController *test  =[[ TestViewController alloc]initWithNibName:@"TestViewController" bundle:nil];


test.itemselected=head;

test.itemid=productid;
//NSLog(@"%@",del.navigationController);

[del.navigationController pushViewController:test animated:YES];

但我知道

NSArray *array = [del.navigationController viewControllers];

[array objectAtIndex:3]是我想要的视图控制器。

任何人都可以知道我怎样才能避免再次推送同一个视图控制器?

3 个答案:

答案 0 :(得分:19)

for (UIViewController*vc in [self.navigationController viewControllers]) {
if ([vc isKindOfClass: [TestViewController class]]){
vc.itemselected= head ; 
[[self navigationController] popToViewController:vc animated:YES];
  }
}

*的 修改 * 这应该是

for (TestViewController*vc in [self.navigationController viewControllers])

而不是

for (UIViewController*vc in [self.navigationController viewControllers])

答案 1 :(得分:0)

根据您的情况,可以弹回并使用新内容重新加载表..无需推送到新实例

对表

的数据源使用单独的数组

从数据源数组中删除所选项

然后在重新加载内容时推送到下一个视图

快乐编码:)

答案 2 :(得分:0)

您可以在视图控制器堆栈上遍历循环。

-(void) viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {

        NSMutableArray *ViewControllerArray=[[NSMutableArray alloc]init];
        for (long i=[self.navigationController.viewControllers count]-1;i>0; i--) {


            [ViewControllerArray addObject:[self.navigationController.viewControllers objectAtIndex:i]];

            NSLog(@"%@",ViewControllerArray);
            NSLog(@"%@",self.navigationController.viewControllers);
        }

        for (UIViewController *controller in self.navigationController.viewControllers) {

            //Do not forget to import AnOldViewController.h
            if ([controller isKindOfClass:[YourViewController class]]) {

                [self.navigationController popToViewController:controller
                                                      animated:YES];
                break;
            }
        }



    }
    [super viewWillDisappear:animated];
}