在标签栏控制器内嵌入导航控制器,但模拟没有显示任何内容

时间:2012-08-02 16:04:12

标签: iphone objective-c ios

我对iOS开发非常陌生,如果这里的专家能够帮助解决我的问题,我将不胜感激。目前,我的应用程序非常基本,并没有做任何事情。在尝试向现有视图添加标签栏之前,一切正常。我不知道我错过了什么,但是当我运行模拟时没有任何显示。我会尽力解释我的应用程序的结构,以便你们能够更好地理解这个问题。

以下内容目前已在申请中提供......

  1. FeedList:嵌入在UINavigationController中的UITableViewController。
  2. FeedCell:为FeedList创建的UITableViewCell。
  3. FeedItemDetail:一个内部带有UIScrollView的UIViewController。通过点击FeedList中的单元格,用户将被带到此屏幕。
  4. 以下是AppDelegate.h和AppDelegate.m的代码。如果有人能够告诉我为什么模拟屏幕上没有显示任何内容,我将不胜感激。谢谢!

        //AppDelegate.h
        #import <UIKit/UIKit.h>
    
        #import "FeedList.h"
    
        @interface AppDelegate : NSObject <UIApplicationDelegate>
        {
            UIWindow *window;
            FeedList *feedList;
            UITabBarController *tabBarController;
        }
    
        @property (nonatomic, retain) IBOutlet UIWindow *window;
        @property (nonatomic, retain) FeedList *feedList;
        @property (nonatomic, retain) UITabBarController *tabBarController;
    
        - (void)customizeAppearance;
    
        @end
    
        //AppDelegate.m
        #import "AppDelegate.h"
    
        @implementation AppDelegate
    
        @synthesize window, feedList, tabBarController;
    
        // Entry point
        - (void)applicationDidFinishLaunching:(UIApplication *)application
        {
            tabBarController = [[UITabBarController alloc] init];
            feedList = [[FeedList alloc] init];
            UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:feedList];
            tabBarController.viewControllers = [NSArray arrayWithObject:nav];
            [window addSubview:tabBarController.view];
            [window makeKeyAndVisible];
        }
    

    更新(问题已解决)

    我意识到在添加行tabBarController.viewControllers = [NSArray arrayWithObject:nav];后,事情开始变得混乱。在检查Apple的文档之后,原因是因为如果在运行时更改了此属性的值,则选项卡栏控制器会在安装新视图控制器之前删除所有旧视图控制器。因此,我们需要将新的标签栏控制器设置为根视图控制器。

1 个答案:

答案 0 :(得分:0)

我同意Dustin的评论,如果你开始新的话,你应该使用故事板。我所看到的方法错误,或者与典型的不同之处在于,你没有将tabBarController作为子视图添加为你设置self.window的rootViewController,如下所示:

// Entry point
    - (void)applicationDidFinishLaunching:(UIApplication *)application
    {
        tabBarController = [[UITabBarController alloc] init];
        feedList = [[FeedList alloc] init];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:feedList];
        tabBarController.viewControllers = [NSArray arrayWithObject:nav];
        //******* This is my correction *******
        window.rootViewController = tabBarController;
        //*******                       *******
        [window makeKeyAndVisible];
    }

当然,如果您的桌面视图设置正确,则无法通过您提供的信息来判断,因此无法保证会显示您的表格。