0

我是 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!

但我没有看到“嗨,你刚刚触摸了屏幕!” 触摸屏幕后的消息。另外,我也没有看到视图区域的背景设置为蓝色。所以,我一定错过了一些非常简单的东西。我一直在网上搜索,但我无法弄清楚我错过了什么。有人会指出我做错了什么吗?

4

2 回答 2

2

我无法访问我的 Mac 来测试这个,但我相信你在这一行中缺少一个冒号。

UITapGestureRecognizer * singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(SingleTap_Handler)];

它需要是:

UITapGestureRecognizer * singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(SingleTap_Handler:)];

如果方法接受任何参数,则冒号是选择器的一部分。

于 2012-08-26T23:03:51.163 回答
1

呃,你能试试把:

self.userinteractionEnabled = YES; 

在你的初始化方法中?

默认情况下,UIViews 设置为不响应触摸事件,因此您必须先启用它们,然后才能使用点击手势。

于 2012-08-27T01:30:08.550 回答