我是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区域的背景也设置为蓝色。所以,我一定是错过了很简单的东西。我一直在谷歌搜索网络,但我无法弄清楚我错过了什么。有些人会不会指出我做错了什么?
答案 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设置为不响应触摸事件,因此您必须先在启用手势之前启用它们。