我是 iOS 开发的菜鸟(所以请多多包涵),我正在尝试用 Xcode 从头开始创建一个简单的触摸应用程序。我已经花了一个星期的时间,但我似乎无法找出我错过了什么,所以我在这里,寻求一些指导:)
首先,我创建了一个空应用程序,然后创建了一个 xib 文件 (MainWindow.xib) 并向其中添加了一个窗口对象 (Main_Window)。然后,我在这个 Main_Window 中创建了一个 View 对象 (Main_View),并在这个视图中添加了一个标签对象 (lblTitle)。Main_View 对象几乎覆盖了整个 Main_Window 屏幕。
所以,简而言之,我的 MainWindow.xib 的层次结构是这样的:Main_Window --> Main_View --> lblTitle。
最后,我创建了一个 ViewController 对象 (Main_View_Controller),其“view”设置为 Main_View,“rootViewController”设置为“Main_Window”。
在项目中,
我使用“TouchEvent_View”将 UIView 子类化,连接到 xib 文件中的“Main_View”。
我使用“TouchEvent_ViewController”将 UIViewController 子类化,连接到 xib 文件中的“Main_View_Controller”。
在我的 AppDelegate.h 中,
我创建了一个“IBOutlet UIWindow *window”,连接到 xib 文件中的“Main_Window”。
我为我的 viewController 和视图类创建了一个对象。
@property (strong, nonatomic) IBOutlet UIWindow *window;
@property (strong, nonatomic) TouchEvent_ViewController * myViewController;
@property (strong, nonatomic) TouchEvent_View *myView;
在 AppDelegate.m 中,我将“MainWindow.xib”与 myViewController 连接起来:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.backgroundColor = [UIColor whiteColor];
self.myViewController = [[[TouchEvent_ViewController alloc]
initWithNibName:@"MainWindow" bundle:nil] autorelease];
[self.window makeKeyAndVisible];
return YES;
}
在“Touch_Event_ViewController.m”中,我将 viewDidLoad 消息编码如下:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Hi! ViewController's viewDidLoad msg sent!");
TouchEvent_View * mView = [[TouchEvent_View alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
mView.backgroundColor = [UIColor blueColor];
[self.view addSubview:mView];
[mView release];
}
在“TouchEvent_View.m”中,我实例化了一个 UITapGestureRecognizer 对象并将其连接到一个处理程序方法,如下所示:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog(@"[TouchEvent_View initWithFrame] sent!");
// Initialization code
//-----------------------
//Touch event declaration
//Single tap
UITapGestureRecognizer * singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(SingleTap_Handler)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
//singleTap.delegate = self;
[self addGestureRecognizer:singleTap];
}
return self;
}
-(void) SingleTap_Handler :(UITapGestureRecognizer *)GR
{
NSLog(@"Hi! You just touched the screen!");
}
当我将项目编译并部署到我的 iPad3 中时,一切都按计划进行,直到 Touch 事件不起作用。
我将以下消息打印到控制台窗口:
2012-08-26 14:03:59.589 Ex_TouchEvents_01[806:707] Hi! ViewController's viewDidLoad msg sent!
2012-08-26 14:03:59.593 Ex_TouchEvents_01[806:707] [TouchEvent_View initWithFram] sent!
但我没有看到“嗨,你刚刚触摸了屏幕!” 触摸屏幕后的消息。另外,我也没有看到视图区域的背景设置为蓝色。所以,我一定错过了一些非常简单的东西。我一直在网上搜索,但我无法弄清楚我错过了什么。有人会指出我做错了什么吗?