带有 UITableView 的 UITabBar - 我可以正确看到表格,但无法选择一行

Posted

技术标签:

【中文标题】带有 UITableView 的 UITabBar - 我可以正确看到表格,但无法选择一行【英文标题】:UITabBar with UITableView - I can see the table correctly, but cannot select a row 【发布时间】:2009-10-08 19:02:59 【问题描述】:

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

我首先构建了一个导航应用程序,其中包含从 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 文件基本名称”,这加载正常,并且在添加 tabBarController 的 BS 之前工作......

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

有人可以帮忙吗? 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 - 我确实意识到你所说的 rootViewController 位于 tabBarController 后面。我只是不知道如何将 tabBar 设置为主视图,将 navController 设置为它的选项卡。我将查看您提到的教程,看看是否有助于解释它。谢谢本!

09-10-14 更新

一些进展! 我现在在选项卡中有视图,顶部带有导航栏。我知道它来自正确的 .xib 文件作为标题,现在可以单击搜索,并且范围按钮是正确的名称。 .... 但和以前一样,如果我到了这个阶段甚至关闭,表格信息不会加载到这个选项卡中(所有单元格都是空白的)。如何让我的表格在这个单元格中正确加载?我知道它正在启动时加载,好像根本没有为这个窗口分配视图,我可以看到表格 n Nav,但无法单击它。(如此接近,但如此遥远)。我现在已经正确设置了选项卡,但是表格没有正确加载... 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

【问题讨论】:

你能分享你设置视图控制器的代码吗?这将有助于了解您的应用的结构。 【参考方案1】:

您似乎正在将标签栏控制器添加到表格控制器的顶部。目前尚不清楚您在哪里设置 tabBarController,但您应该只向窗口添加一个视图(在倒数第三行和倒数第二行中添加两个)。

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

web 上发布了关于此主题的教程。

【讨论】:

嗨,Ben - 本教程适用于 3.0 之前的版本 此外,我在 IBuilder 中尝试了许多变体,这会创建一个包含空白字段的视图或一个不是来自 appDelegate 的导航栏。 h / RootViewController.m 如上所列。正如我所提到的,我确实看到了我想要的视图,我只需要在单击该选项卡时以某种方式将表格放在前面,并且能够选择一行,而我现在无法做到这一点。跨度> 【参考方案2】:

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

【讨论】:

以上是关于带有 UITableView 的 UITabBar - 我可以正确看到表格,但无法选择一行的主要内容,如果未能解决你的问题,请参考以下文章

MonoTouch:UITabBar 与 UITableView 重叠

包含 UITableView 和 UITabBar 的视图

手动将 UITabBar 添加到 UITableViewController

使用 UITableView 填充 UITabBar

UITabBar 将隐藏 UITableView 的最后一个单元格

UITableView 错误的部分标题