我的问题是样本......但我仍然不知道为什么我的观点不会推向另一种观点......
首先,我在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个小时......
非常感谢:)
答案 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