UITabBar与UITableView - 我可以正确地看到表,但不能选择一行

时间:2009-10-08 19:02:59

标签: ios iphone uitableview uitabbarcontroller

对于某人来说,这可能是一个简单的答案。

我首先构建了一个导航应用程序,其中有一个从SQLite加载的表。 rootViewController(UITableViewController)从mainWindow.xib加载。我添加了搜索和范围函数,并从行选择中推送详细视图(UIViewController),并且可以在表中来回导航和过滤结果,搜索,使用范围不同的搜索。一切都很好,没有错误,崩溃或警告。

现在我尝试在rootViewController的顶部添加一个tabBar接口... 2天后我有TabBarController显示(我试图直接在RootviewController上实现它,但发现我必须在mainWindow)我可以从标签栏中选择不同的视图(xib)。我有一个在IB中没有分配视图的选项卡,我可以看到RootViewController加载,因为它在此选项卡视图中的第一个屏幕之前,即使没有在选项卡中分配RootViewController。

问题是我以这种方式加载时无法点击表格中的一行。或者,如果我创建一个选项卡,调用RootViewController,我会在顶部找到搜索栏,但表格为空。我觉得这是由于我的appDelegate加载rootViewController,我不知道如何让它“加载”或“重新加载”到选项卡,或类似的东西。我尝试在添加标签栏之前创建一个与原始mainWindow相同的单独“search.xib”,然后尝试在TabItem中加载它,因此它首先调用appDelegate,但没有雪茄:崩溃。我验证了search.xib工作正常,因为我把它作为info.plist“主nib文件基本名称”,这加载很好,并像以前的BS一样添加tabBarController ......

我会开始粘贴代码,但不确定某人需要知道什么是遗漏或错误。我在RootViewController.m中的[self.tableView reloadData]中调用了-(void)viewDidLoad,但它根本没有帮助解决这个问题。

有人可以帮忙吗? Mac OS X是10.5.8版,我正在使用XCode 3.1.4。

// Create and configure the main view controller.
RootViewController *rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
rootViewController.violinMakers = violinMakers;
[violinMakers release];



// Add create and configure the navigation controller.
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
self.navController = navigationController;
[navigationController release];



// Configure and show the window, Override point for customization after app launch 
[window addSubview:[navController view]];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

感谢您的帮助! 上面的最后一节似乎是我应该让RootViewController在堆栈顶部,但不知道如何。

  // <AppName>AppDelegate.h
@interface <AppName>AppDelegate: NSObject  <UIApplicationDelegate,
UITabBarControllerDelegate, UINavigationControllerDelegate>{
UIWindow *window;
UINavigationController *navController;
UITabBarController *tabBarController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UINavigationController *navController;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end

Ben - 我确实意识到你对tabBarController背后的rootViewController的看法。我只是不知道如何将tabBar设置为主视图,并将navController设置为它的选项卡。我将看一下你提到的教程,看看是否有助于解释它。谢谢Ben!

09-10-14更新

一些进步! 我现在在选项卡中有视图,其中NavBar位于顶部。我知道它来自正确的.xib文件作为标题,现在可以点击搜索,并且范围按钮是正确的名称。 ....但是和以前一样,如果我进入这个阶段甚至关闭,表格信息不会加载到此选项卡中(所有单元格都是空白的)。如何让我的表在这个单元格中正确加载?我知道它在启动时正在加载,好像根本没有分配给这个窗口的视图,我可以看到表n导航,但是无法点击它。(如此接近,但距离很远)。我现在已正确设置选项卡,但表格未正确加载... rrrr

我有典型的

[self.tableView reloadData]; 

在方法中的viewController.m中:

- (void)viewWillAppear:(BOOL)animated

并在

- (void)viewDidAppear:(BOOL)animated

并在

- (void)viewDidLoad 

并尝试了其他一些方法,但是当我选择标签时,它没有重新加载表信息。

如何正确地在TabBar视图中重新加载此表?

我确实在tabBars上找到了一个很好的教程,比其他人在向IB解释时更进一步。 Twillo Embed Nav in a Tab Tutorial

2 个答案:

答案 0 :(得分:0)

您可能会在桌面控制器的TOP上添加标签栏控制器。目前还不清楚你在哪里设置tabBarController,但是你应该只在窗口中添加一个视图(在倒数第三行和倒数第二行中添加两个)。

Navigation和TabBar控制器的基本前提是您的Tab Bar控制器是主控制器,您将添加导航控制器作为其选项卡之一。然后,将tabBarController.view添加到您的窗口。选择哪个选项卡将是可见选项卡。

web上有关于此主题的教程。

答案 1 :(得分:0)

基本上这就是我为那些遇到同样问题的人找到的。 这并不容易,或者Apple真的建议它稍后在程序中实例化标签栏。是的,它可以完成,但现在我建议采用不同的方法。我发现一个模态视图控制器只是一个很好的tabBar,abeit更小,但占用更少的房地产,因为它可以放在导航栏中。如果您计划使用标签的应用程序,请从基于标签的应用程序开始,然后对其进行自定义,不要尝试稍后更改导航结构,这是潜在的问题。其次,我发现Apple在Interface Builder上的文档不尽如人意。每个人都感到困惑,它的实施限制了实际的最终产品结构化,而不是简化。更不用说在将所有元素“连接”在一起时更加困惑。这真的很糟糕,我花了两周的时间尝试各种方法让它发挥作用。这不是不可能的,只是令人难以置信的不直观,而且我错误地改变了桨的一半。看看你想要访问信息的方式的替代方案,我认为你会找到更好的方法,比如模态视图来完成这个,或者通过IB动作的简单按钮来访问不同的视图或更多信息。 快乐编程! 柯克