我有一个通用应用程序,它在同一个文件MainWindow.xib中包含所有视图。今天我决定将这些视图分成各自的xib文件(例如,有MainMenuController.h,MainMenuController.m和MainMenuController.xib)。现在我无法收到和IBActions。以下是我一步一步做的事情:
我创建了一个名为MainMenuController.xib的新.xib文件,并将其文件所有者设置为已存在的MainMenuController类。
我从MainWindow.xib文件中复制了与MainMenuController对应的视图,并将其粘贴到新创建的MainMenuController.xib中。我将文件所有者的视图设置为新粘贴的视图(在IB中连接)。
在info.plist中,我删除了“主xib文件基本名称”的条目,因此应用程序无法自动打开MainWindow.xib。
我修改了app委托,以编程方式创建窗口,并使用以下代码将MainMenuController添加到其中:
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
mainMenuController = [[MainMenuController alloc] init];
self.window.rootViewController = mainMenuController;
[self.window makeKeyAndVisible];
[mainMenuController release];
“mainMenuController”和“window”是实例变量,也被声明为属性。
我只有一个AppDelegate类,main.m包含:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}}
现在,当应用程序打开时,我会看到MainMenuController的视图出现。此时,我开始在新的xib文件中粘贴IBOutlets和IBActions。虽然我在文件所有者中看到IBOutlets并正确连接它们,但是当我按下按钮时,永远不会调用IBAction的功能。
我想到的可能错误: (1)应用程序窗口没有正确设置,它没有通过事件, (2)复制视图时卡住或丢失的东西仍然指向旧的所有者 (3)xcode项目中存在错误的问题
您认为问题是什么?它是上述之一吗?我怎么解决这个问题?任何帮助表示赞赏。
提前致谢。
答案 0 :(得分:0)
您创建主视图控制器:
mainMenuController = [[MainMenuController alloc] init];
没有引用XIB。因此,您正在进行纯粹的程序化创建,而不参考XIB中可能存在或不存在的任何内容。因此,您的视图控制器似乎工作,但没有任何插座或操作连接。你可能在别处做参考,但我觉得不合适。
可能你想要:
mainMenuController = [[MainMenuController alloc]
initWithNibName:@"MainMenuController" bundle:nil];
这将明确使用XIB中的任何内容来创建控制器。