重命名xib文件后,IBAction无法正常运行

时间:2012-09-06 21:14:04

标签: iphone xcode xib uiapplication ios-universal-app

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

  1. 我创建了一个名为MainMenuController.xib的新.xib文件,并将其文件所有者设置为已存在的MainMenuController类。

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

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

  4. 我修改了app委托,以编程方式创建窗口,并使用以下代码将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]));
    }}
    
  6. 现在,当应用程序打开时,我会看到MainMenuController的视图出现。此时,我开始在新的xib文件中粘贴IBOutlets和IBActions。虽然我在文件所有者中看到IBOutlets并正确连接它们,但是当我按下按钮时,永远不会调用IBAction的功能。

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

    您认为问题是什么?它是上述之一吗?我怎么解决这个问题?任何帮助表示赞赏。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

您创建主视图控制器:

mainMenuController = [[MainMenuController alloc] init];

没有引用XIB。因此,您正在进行纯粹的程序化创建,而不参考XIB中可能存在或不存在的任何内容。因此,您的视图控制器似乎工作,但没有任何插座或操作连接。你可能在别处做参考,但我觉得不合适。

可能你想要:

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

这将明确使用XIB中的任何内容来创建控制器。