Viewcontroller无法推送到另一个视图?

时间:2011-01-14 06:11:51

标签: iphone uitableview pushviewcontroller

我的问题是样本......但我仍然不知道为什么我的观点不会推向另一种观点......

首先,我在NSMutableArray中添加了许多视图

static NSString *titleKey = @"title";
static NSString *viewControllerKey = @"viewController";

- (void)viewDidAppear:(BOOL)animated {
    self.menuList = [NSMutableArray array];

    FirstView *firstView = [[FirstView alloc]initWithNibName:nil bundle:nil];
    [self.menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                              NSLocalizedString(@"FirstView", @""), titleKey,
                              firstView, viewControllerKey,
                              nil]];
    [FirstView release];


    SecondView *secondView = [[SecondView alloc]initWithNibName:nil bundle:nil];
    [self.menuList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                              NSLocalizedString(@"SecondView", @""), titleKey,
                              secondView, viewControllerKey,
                              nil]];
    [SecondView release];

好的...这是我如何在数组中添加viewcontroller ...

我希望当我在表视图中按下单元格时,它将转到我想要显示的视图

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *targetViewController = [[self.menuList objectAtIndex: indexPath.row] objectForKey:viewControllerKey];
    targetViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [[self navigationController] pushViewController:targetViewController animated:YES];
}

按下按钮后,没有任何事情发生

首先我想可能是我没有正确设置数组

但是当我记录数组时

它真的在里面......

结果如下:

Log message: MENU LIST (
        {
        title = "FirstView";
        viewController = "<Firstview: 0x5822500>";
    },
        {
        title = "SecondView";
        viewController = "<SecondView: 0x5822870>";
    }
)

我不知道为什么程序不起作用......

有没有人有任何想法???

这只是一件非常简单的事情,仍然坚持了3个小时......

非常感谢:)

3 个答案:

答案 0 :(得分:1)

首先,您需要检查targetViewController的类型,看它是否正在为您提供正确的ViewController。如果它是正确的,那么

您确实应该检查self.navigationController值,以确保它不是nil

我怀疑第二件事就是问题。

答案 1 :(得分:0)

首先,我要说,布拉沃,这是一个非常具有挑战性的问题。

我确信我的答案会有所帮助,但只是听我说。

当你使用

UIViewController *targetViewController = [[self.menuList objectAtIndex: indexPath.row] objectForKey:viewControllerKey];

你正在为uiviewcontroller分配一个类型为firstview或secondview的类,我的问题就在于此。

但它是正确的,因为父类可以取代子类(假设2类已经子类化了uiviewcontroller)。

所以你可以在

上设置一个断点

  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

在控件到达函数结束之前,将光标放在targetViewController上并检查它的内容。

如果它有第一个视图或第二个视图,它会显示第一个视图和第二个视图的变量类型。

答案 2 :(得分:0)

为了成功执行推送操作,您需要在应用程序委托中使用根视图控制器创建UINavigationController(根视图控制器= FirstView-&gt;我希望这是一个UIViewController)。

执行此操作后,您可以在FirstView中调用

[[self navigationController] pushViewController:targetViewController animated:YES];

为了在堆栈上推送另一个UIViewController。

  

UINavigationController类   实现专门的视图   管理导航的控制器   分层内容。这堂课是   不打算用于子类化。代替,   你按原样使用它的实例   你想要你的情况   应用程序的用户界面   反映了等级的性质   你的内容。这个导航   界面使得呈现成为可能   您的数据有效,也有效   用户更容易导航   那个内容。

这是UINavigationController文档的官方链接,它们很有用。 Link to UINavigationController documentation