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のようになります。

最後に、「view」をMain_Viewに設定し、「rootViewController」を「Main_Window」に設定して、ViewControllerオブジェクト(Main_View_Controller)を作成しました。

プロジェクトでは、

UIViewを「TouchEvent_View」でサブクラス化し、xibファイルの「Main_View」に接続しました。

UIViewControllerを「TouchEvent_ViewController」でサブクラス化し、xibファイルの「Main_View_Controller」に接続しました。

私のAppDelegate.hでは、

xibファイルの「Main_Window」に接続された「IBOutletUIWindow*window」を作成しました。

viewControllerクラスとviewクラスのオブジェクトを作成しました。

 @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; 

あなたのinitメソッドで?

デフォルトでは、UIViews はタッチ イベントに応答しないように設定されているため、タップ ジェスチャが機能する前にまずそれらを有効にする必要があります。

于 2012-08-27T01:30:08.550 に答える