みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

iPhone SDK UIViewに追加したUIButtonが反応しな

iPhone SDK UIViewに追加したUIButtonが反応しない。。。

インターフェイスビルダーにあるUIViewにボタンを追加した場合は、
ちゃんとボタンは反応するんですが、プログラムから追加したUIViewにボタンをおくと
UIControlEventTouchUpInsideのイベントに反応しません。

一応、こちらに簡単なプロジェクトもあげておきました。
http://gemic.jp/xcode/buttonOnView.zip
詳細は、下記です。

View-Based Applicationテンプレートで作成したプロジェクト(buttonOnView)

buttonOnViewViewController.h

#import <UIKit/UIKit.h>

@interface buttonOnViewViewController : UIViewController {
UIView *theView;
}

@end
-----------------------------------------------------------------
buttonOnViewViewController.m

- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
UIButton *btn1 = [[UIButton buttonWithType:UIButtonTypeRoundedRect]retain];
[btn1 initWithFrame:CGRectMake(60, 90, 200, 50)];
//このボタンは反応する↓
[self.view addSubview:btn1];
[btn1 setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[btn1 addTarget:self action:@selector(createView:) forControlEvents:UIControlEventTouchUpInside];
}

- (IBAction)createView:(UIButton*)sender {

theView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[theView setBackgroundColor:[UIColor greenColor]];
[self.view addSubview:theView];

UIButton *btn = [[UIButton buttonWithType:UIButtonTypeRoundedRect]retain];
[btn initWithFrame:CGRectMake(60, 150, 200, 50)];
//このボタンは反応しない↓
[theView addSubview:btn];
[btn addTarget:self action:@selector(deleteView:) forControlEvents:UIControlEventTouchUpInside];

}

- (IBAction)deleteView:(UIButton*)sender {
NSLog(@"touch event reaction");
[theView removeFromSuperview];

}
-----------------------------------------------------------------

いろいろググってみたり、DevCenterのドキュメントを探したんですが、
思ったような情報が見つからず相当はまってます。
ネットで探して見つからないってことは、凄く初歩的なことか??
と思ってるんですが、、、
どなたか、助けていただけたらありがたいです。

投稿日時 - 2010-04-07 19:44:31

QNo.5809751

すぐに回答ほしいです

質問者が選んだベストアンサー

以下のように書き換えて、ビルドしてみてください。

- (void)viewDidLoad {
[super viewDidLoad];

UIButton *btn1 = [UIButton buttonWithType: UIButtonTypeRoundedRect];
btn1.frame = CGRectMake(20, 20, 160, 36);
[btn1 setTitle: @"Make Button" forState: UIControlStateNormal];
[btn1 addTarget: self action: @selector(makeButton:) forControlEvents: UIControlEventTouchUpInside];
[self.view addSubview: btn1];
}

- (void)makeButton: (id)sender
{
theView = [[[UIView alloc] initWithFrame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)] retain];
theView.backgroundColor = [UIColor greenColor];
UIButton *btn2 = [UIButton buttonWithType: UIButtonTypeRoundedRect];
btn2.frame = CGRectMake(20, 60, 160, 36);
[btn2 setTitle: @"Delete Button" forState: UIControlStateNormal];
[btn2 addTarget: self action: @selector(deleteButton:) forControlEvents: UIControlEventTouchUpInside];
[theView addSubview: btn2];
[self.view addSubview: theView];
}

- (void)deleteButton: (id)sender
{
[theView removeFromSuperview];
NSLog(@"the button is pushed.");
}

投稿日時 - 2010-04-08 17:34:09

お礼

いろんなところを丁寧に直していただいてありがとうございます。

つまるところ、
theView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

theView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
ってことですよね。。
UIViewで動かないと思ったあと、UIImageViewで試して、UIViewに戻したつもりだったんですが。
こんなミスじゃ、どおりでググっても出てこないわけだ・・・

とにかく、どうもありがとうございます!

投稿日時 - 2010-04-08 23:47:29

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問