2012-01-17 9 views
1

UIViewのサブビューであるUIButtonでタップをキャプチャする際に問題があります。私のコードがどのように設定されているのですか:UIViewのサブビューであるUIButtonをタップします

// in MyClass.m 
@interface MyClass() 
@property (nonatomic, retain) UIButton *myButton; 
@end 

@implementation MyClass 
@synthesize myButton; 

- (void) buttonTapped:(id) sender { 
    NSLog(@"button tapped!"); 
} 

- (id) initWithFrame:(CGRect)frame { 
    if (!(self = [super initWithFrame:CGRectZero])) 
     return nil; 

    myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [myButton setImage:[UIImage imageNamed:@"image.png"] 
            forState:UIControlStateNormal]; 
    [myButton addTarget:self 
       action:@selector(buttonTapped:) 
     forControlEvents:UIControlEventTouchUpInside]; 
    myButton.exclusiveTouch = YES; 
    myButton.frame = CGRectMake(100, 100, 100, 100); 
    [self addSubview:myButton]; 

    return self; 
} 

- (void) dealloc { 
    [myButton release]; 
    [super dealloc]; 
} 

@end 

ボタンがビューに表示されます。タップするとボタンの色が瞬時に変わります。ただし、セレクタbuttonTapped:は呼び出されません。 何か考えてみませんか?

buttonTapped:が本当にmyButtonのターゲットであることを確認するにはどうすればよいですか?あなたの現在のクラスは、R

NSLog(@"actions for target %@",[myButton actionsForTarget:self forControlEvent:UIControlEventTouchUpInside]); 

をログに記録することにより、ターゲットであることを確認できた

+1

フレームがCGRectZeroに設定されているのはなぜですか?また、 '[super release]'ではなく '[super dealloc]'でなければなりません。 – Anna

+0

あなたは正しいです。 '[super dealloc];に更新されました – SundayMonday

答えて

1

はしかし、私はテストプロジェクト(単一のビューテンプレート)にコードを追加し、buttonTapped:方法が働いていました。

- (void) buttonTapped:(id) sender { 
    NSLog(@"button tapped!"); 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 


    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; 
    self.window.rootViewController = self.viewController; 
    UIButton * myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [myButton setImage:[UIImage imageNamed:@"image.png"] 
      forState:UIControlStateNormal]; 
    [myButton addTarget:self 
       action:@selector(buttonTapped:) 
    forControlEvents:UIControlEventTouchUpInside]; 
    myButton.exclusiveTouch = YES; 
    myButton.frame = CGRectMake(100, 100, 100, 100); 
    [rv.view addSubview:myButton]; 

    return YES; 
} 

問題は他にあります。コードはMyClassの全体の.hと.mをポストしていますか?

+0

解決策が見つかりました:http://stackoverflow.com/questions/3344341/uibutton-inside-a-view-that-has-a-uitapgesturerecognizerこれは、UIGestureRecognizersの使用に関連しています。 – SundayMonday

関連する問題