UIGestureRecognizer与UIVIew联系在一起

时间:2012-08-26 22:42:30

标签: objective-c ios cocoa-touch uigesturerecognizer

我是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 *窗口”,它连接到xib文件中的“Main_Window”。

我为viewController和视图类创建了一个对象。

 @property (strong, nonatomic) IBOutlet UIWindow *window; 
 @property (strong, nonatomic) TouchEvent_ViewController * myViewController;
 @property (strong, nonatomic) TouchEvent_View *myView;

在AppDelegate.m中,我使用myViewController连接“MainWindow.xib”:

 - (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!

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

2 个答案:

答案 0 :(得分:3)

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

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

需要:

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

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

答案 1 :(得分:1)

呃,你能尝试一下:

self.userinteractionEnabled = YES; 
在你的init方法中

默认情况下,UIViews设置为不响应触摸事件,因此您必须先在启用手势之前启用它们。