2

我有一个通用应用程序,它在同一个文件 MainWindow.xib 中包含所有视图。今天我决定将这些视图分成各自的 xib 文件(例如 MainMenuController.h、MainMenuController.m 和 MainMenuController.xib)。现在我无法接收和 IBActions。这是我一步一步做的:

  1. 我创建了一个名为 MainMenuController.xib 的新 .xib 文件,并将它的 File's Owner 设置为已经存在的 MainMenuController 类。

  2. 我从 MainWindow.xib 文件中复制了 MainMenuController 对应的视图,并将其粘贴到新创建的 MainMenuController.xib 中。我将文件所有者的视图设置为新粘贴的视图(在 IB 中连接)。

  3. 在 info.plist 中,我删除了“主 xib 文件基本名称”的条目,因此应用程序不会自动打开 MainWindow.xib。

  4. 我修改了应用程序委托以编程方式创建窗口,并使用以下代码将 MainMenuController 添加到其中:

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    mainMenuController = [[MainMenuController alloc] init];
    self.window.rootViewController = mainMenuController;
    [self.window makeKeyAndVisible];
    [mainMenuController release];
    

    “mainMenuController”和“window”是实例变量,也被声明为属性。

  5. 我只有一个 AppDelegate 类和 main.m 包含:

    int main(int argc, char *argv[])
    {
      @autoreleasepool {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }}
    

现在,当应用程序打开时,我看到 MainMenuController 的视图出现了。此时,我开始在新的 xib 文件中的粘贴视图中连接 IBOutlets 和 IBActions。尽管我在 File's Owner 中看到了 IBOutlets 并正确连接了它们,但是当我按下按钮时,IBAction 的函数从未被调用。

我想到的可能错误:(1)应用程序窗口设置不正确,它没有传递事件,(2)复制视图时有东西卡住或丢失,仍然指向旧所有者(3)卡住了错误xcode 项目

你认为问题可能是什么?是上述之一吗?我该如何解决这个问题?任何帮助表示赞赏。

提前致谢。

4

1 回答 1

0

Your creation of the main view controller:

mainMenuController = [[MainMenuController alloc] init];

makes no reference to the XIB. So you're doing a purely programmatic creation with no reference to whatever may or may not be in the XIB. Hence your view controller appears to work but none of the outlets or actions are wired up. You may be making reference elsewhere, but I guess not appropriately.

Probably you want:

mainMenuController = [[MainMenuController alloc] 
                              initWithNibName:@"MainMenuController" bundle:nil];

That'll explicitly use whatever is in the XIB to create the controller.

于 2012-09-06T21:30:34.217 回答