【问题标题】:UITableView in UInavigationController not workingUInavigationController 中的 UITableView 不起作用
【发布时间】:2013-03-31 11:47:46
【问题描述】:

我已经搜索和试验了一段时间,但我就是不知道我做错了什么。

我想制作一个带有菜单的应用程序,从该菜单中,您可以访问带有标题栏的TableViewcontroller。我发现,为了得到这个标题栏,你需要将UITableViewController“插入”到UINavigationController中。这就是我卡住的地方。

暂时不要介意/忘记应用程序中的菜单,因为我知道当用户点击按钮时如何切换视图控制器。

在我的 AppDelegate.m 中有:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    TableViewController *tableView = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
    self.navController = [[UINavigationController alloc] initWithRootViewController:tableView];
    self.window.rootViewController = navController;
    [self.window makeKeyAndVisible];
    return YES;
}

在我的 AppDelegate.h 文件中:

@interface AppDelegate : UIResponder <UIApplicationDelegate>{
    UINavigationController *navcontroller;
}

@property (strong, nonatomic) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navController;

我有 2 个分类器,UITableViewController 和 NavigationView。

UITableViewController中,我做了一个叫tableRows的数组:

tableRows = [[NSArray arrayWithObjects:@"1", @"2", nil] init];

numberOfSectionsInTableView 设置为 1,numberOfRowsInSection 设置为 return tableRows.count;

我没有改动我的 NavigationView.m,只是我尝试在其中设置标题。

在我的NavigationView.xib 中,我尝试在UITableViewControllerUINavigationController 之间建立连接。

  • 我添加了一个 NSObject,并将其类更改为 AppDelegate
  • 我将 View 替换为 UIWindow 并从我的 AppDelegate.h给它
  • 我添加了UINavigationController 和 将它与我的AppDelegate.h 中的navController 连接起来。
  • 最后,我将 RootView 中的类从 UINavigationControllerUITableViewController

现在我的问题是,无论是否有 IB 中的连接,无论我尝试在表格或标题栏中更改什么,在我运行应用程序时它都不会改变。

有人知道我做错了什么吗?我使用的是 xcode 4.6,所以我检查过的很多教程都不是很有用,因为它们是用旧版本的 xcode 制作的。请帮助我,提前谢谢!

【问题讨论】:

  • 如果可能的话,使用另一个带有 XIB 的 ViewController 并在 ViewController 中添加 tableView。您可能无法直接添加该 tableView。
  • 很幸运不可能。当我这样做时,它也给出了一个问题:loaded the "ViewController" nib but the view outlet was not set.';
  • 它没有加载数据吧?
  • 你在吗@JorisDijkstra,请回复
  • 可能不是。我真的很想知道我做错了什么,因为当我开始在 SO 和其他网站上搜索其他问题时,这似乎是最简单的事情。在处理了一段时间没有任何结果之后,它开始让我绝望..

标签: iphone xcode ipad uinavigationcontroller uitableview


【解决方案1】:

在你AppDelegate替换这一行

    TableViewController *tableView = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];

有了这个

    TableViewController *tableView = [[TableViewController alloc] initWithStyle:UITableViewStylePlain];

【讨论】:

  • 我找到了解决方案。看看这个,你正在初始化 UITableViewController 而不是你的 TableViewController 类。
  • 是的,这确实改变了任何事情,但我可能不得不对网点做点什么,因为上面写着'-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "TableViewController" nib but the view outlet was not set.'
  • 没错,现在给你的tableview分配outlet
  • 现在这是个问题。你能向我描述一下这个过程吗?我以前从未这样做过,因为编程对我来说是新事物。到目前为止,我非常感谢您的努力!
  • 我已经附上了一个截图,不要忘记分配代表和数据源,如图所示,@JorisDijkstra 让我知道这些见解?
【解决方案2】:

您没有创建TableViewController 的实例,而是创建了UITableViewController,因此您没有执行任何代码。 (您的应用程序委托中应该对此有编译器警告 - 请务必注意这些警告)。同样,您不会在任何地方加载 NavigationView 笔尖 - 您正在创建一个导航控制器,其中表作为根视图控制器。目前尚不清楚您对 NavigationView 的目标是什么,因此我无法就如何进行提供建议。但是,对于表格视图,请在您的应用委托中更改以下行

TableViewController *tableView = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];

TableViewController *tableView = [[TableViewController alloc] init];

在您的表视图 xib 中,确保文件所有者的类设置为 TableViewController 类(而不是 UITableViewController)。右键单击表格视图并将“数据源”和“委托”旁边的圆圈拖动到文件所有者。然后右键单击文件的所有者并确保“视图”旁边的圆圈连接到表格视图。保存、清理并运行。

【讨论】:

    【解决方案3】:

    您可能还会发现查看免费的 Sensible TableView 框架非常有用。该框架将获取您的数组并自动生成所有表格视图单元格,同时管理正确设置导航控制器所需的所有细节。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 2012-01-06
      • 2013-12-04
      • 1970-01-01
      相关资源
      最近更新 更多