0

我正在学习Objective-C,并在学习的同时开始创建一个应用程序。我创建了一个“单视图应用程序”,其中包含两个名为“ViewController”和“secondViewController”的“视图控制器”,之后我想添加一个“UITabBarController”,所以按照教程我在 AppDelegate.m 中使用了以下代码

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

[self customizeInterface];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UITabBarController *tabController = [[UITabBarController alloc] init];

UIViewController *viewController1 = [[UIViewController alloc] init];
UITabBarItem *tab1 = [[UITabBarItem alloc] initWithTitle:@"Artists" image:[UIImage imageNamed:@"artist-tab.png"] tag:1];
[viewController1 setTabBarItem:tab1];

UIViewController *viewController2 = [[UIViewController alloc] init];
UITabBarItem *tab2 = [[UITabBarItem alloc] initWithTitle:@"Music" image:[UIImage imageNamed:@"music-tab.png"] tag:2];
[viewController2 setTabBarItem:tab2];

tabController.viewControllers = [NSArray arrayWithObjects:viewController1,
                                 viewController2, nil];


self.window.rootViewController = tabController;

[self.window makeKeyAndVisible];


// Override point for customization after application launch.
return YES;
}

这是 ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

如果我运行应用程序,标签栏正在工作,但我有一个空白屏幕,而不是我创建的 ViewController。仅仅因为我是一个菜鸟,你能告诉我如何在每个选项卡中分别链接或显示视图控制器吗?

请善意地说出所有显而易见的事情。先感谢您

4

2 回答 2

1

由于您是初学者,我强烈建议您使用故事板,这将有助于更轻松地管理界面,因为您几乎不需要编写任何代码。

http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1

我只是在猜测,但您的问题可能是您直接使用init视图控制器,您应该initWithNibName:didFinishLaunchingWithOptions. 当initWithNibName:您从 nib 文件创建控制器实例时,您会调用它。

所以基本上initWithNibName:是在加载和实例化 NIB 时调用的。

我不知道您的 ViewContoller 类名,但您应该更改视图控制器的 init 方法

在您的应用程序 delegate.m

#import "ViewController.h"
#import "secondViewController.h" 


    UIViewController *viewController1 = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]]; // make sure on interface builder hat you Nib name is ViewController

    UIViewController *viewController2 = [[secondViewController alloc] initWithNibName:@"secondViewController" bundle:[NSBundle mainBundle]];// make sure on interface builder hat you Nib name is secondViewController

并且请使用大写字符和类名的详细名称 secondViewController 不是好的编程习惯

于 2013-01-31T17:41:10.283 回答
0

标签栏控制器显示您在代码中创建的视图。这是预期的行为,因为您正在创建全新的视图。

如果您在 Interface Builder 中创建了“ViewController”和“secondViewController”,那么您将不得不加载 nib——而不是创建新视图——并告诉标签栏控制器使用它们。

基本上你必须改变你的线路:

UIViewController *viewController1 = [[UIViewController alloc] init];

类似于

UIViewController *viewController1 = [[UIViewController alloc] initWithNibName:@"view1" bundle:nil];

详情请参阅initWithNibName:bundle:

于 2013-01-31T17:45:21.717 回答