2016-11-14 12 views
0

私はself.viewにmenuViewを作成し、menuViewにはUIViewである2つのサブビューがあります。 このUIViewには4 UIButtonが含まれていますが、いずれか1つをクリックすることはできません。 userInteractionEnabled YESに設定すると、ビューのデバッグでボタンのフレームが正しく設定されます。 コード:UIViewのボタンをクリックできません

UPDATE:Project In Github

ViewController.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    LeftMenuView *leftView=[LeftMenuView createLeftMenuView]; 
    leftView.userInteractionEnabled=YES; 
    self.leftView=leftView; 
    [self.view addSubview:leftView]; 
    //nightButton 
    UIButton *nightButton=[self.leftView viewWithTag:6]; 
    [nightButton addTarget:self action:@selector(touchButton:) forControlEvents:UIControlEventTouchUpInside]; 
    leftView.userInteractionEnabled=YES; 
    //set 
    UIButton *settingButton=[self.leftView viewWithTag:4]; 
    [settingButton addTarget:self.leftView action:@selector(push) forControlEvents:UIControlEventTouchUpInside]; 
    } 

** LeftMenuView.m:**これはUIViewクラスです。私はボタンとメニューを設定する場所です。

-(instancetype)initWithFrame:(CGRect)frame 
{ 
    self=[super initWithFrame:frame]; 
    self.backgroundColor=[UIColor colorWithRed:26/256.f green:31/256.f blue:36/256.f alpha:0.7]; 
    [self addHeaderView]; 
    [self addButton]; 
    return self; 
} 
#pragma mark -add view to menu view 
-(void)addHeaderView 
{ 
    UIView *headViewUp=[[UIView alloc]init]; 
    headViewUp.userInteractionEnabled=YES; 
    headViewUp.frame=CGRectMake(0, 0, yScreenWidth/2, 114); 
    headViewUp.backgroundColor=ColorWithRGB(26, 31, 36); 
    headViewUp.backgroundColor=[UIColor redColor]; 
    self.headViewUp=headViewUp; 
    [self addSubview:headViewUp]; 
    UIView *headViewDown=[[UIView alloc]init]; 
    headViewDown.userInteractionEnabled=YES; 
    headViewDown.frame=CGRectMake(0, yScreenHeight-50, yScreenWidth/2, 50); 
    headViewDown.backgroundColor=ColorWithRGB(26, 31, 36); 
    self.headViewDown=headViewDown; 
    [self addSubview:headViewDown]; 
} 
-(void)addButton 
{ 
    UIButton *settingButton=[self setFrame:CGRectMake(yScreenWidth*2/6, 64, yScreenWidth/6, 50) title:@"设置" image:@"Menu_Icon_Setting"]; 
    settingButton.userInteractionEnabled=YES; 
    settingButton.tag=4; 
    [self resizeTextAndImageInButton:settingButton]; 
    [self.headViewUp addSubview:settingButton]; 
    UIButton *nightButton=[self setFrame:CGRectMake(yScreenWidth/4, 0, yScreenWidth/4, 50) title:@"白天" image:@"Menu_Day"]; 
    nightButton.tag=6; 
    [self.headViewDown addSubview:nightButton]; 
} 
-(UIButton *)setFrame:(CGRect)frame title:(NSString *)title image:(NSString *)imageName 
{ 
    UIButton *button=[[UIButton alloc]initWithFrame:frame]; 
    [button setTitle:title forState:UIControlStateNormal]; 
    [button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 
    button.titleLabel.font=[UIFont systemFontOfSize:8]; 
    button.contentHorizontalAlignment=UIControlContentHorizontalAlignmentCenter; 
    return button; 
} 
-(void)resizeTextAndImageInButton:(UIButton *)button 
{ 
    [button setTitleEdgeInsets:UIEdgeInsetsMake(button.imageView.frame.size.height ,-button.imageView.frame.size.width, 0.0,0.0)]; 
    [button setImageEdgeInsets:UIEdgeInsetsMake(-10, 0.0,0.0, -button.titleLabel.bounds.size.width)]; 
} 

クリームボタンの方法は動作しません。

+1

何が起こることを期待します以下のようにクリックイベントを処理設定されていますか? 'viewDidLoad'では、これらのボタンをビューに追加することはありません。また、' addButton'では、それらのボタンにターゲットを追加しません。 – WMios

+0

正しくデバッグしてください。 –

+0

@WMiosこのボタンをLeftMenuViewに追加し、viewDidLoadにターゲットを追加します。このボタンは表示できますがクリックしません。 – yangOne

答えて

1

私はあなたのコードを調べました。 "LefMenuView"のフレームを設定していないという誤ったことをしています。これをしなかったとしても、そのサブビューは表示されますが、タッチできないか、クリックできません。

だからこれを試してください。私は以下のコードを追加して実行します。今、私はクリックアクションを見ることができます。

Rule of thumb : if super view frame is Zero then all subviews are visible but not touchable.(Because you are touching out side of bounds). 

ViewController.m


LeftMenuView *leftView=[LeftMenuView createLeftMenuView]; 
leftView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
leftView.userInteractionEnabled=YES; 
0

あなたはこのコードは、次の

-(void)addButton 
{ 
    UIButton *settingButton=[self setFrame:CGRectMake(yScreenWidth*2/6, 64, yScreenWidth/6, 50) title:@"设置" image:@"Menu_Icon_Setting"]; 
    settingButton.userInteractionEnabled=YES; 
    settingButton.tag=4; 
    [self resizeTextAndImageInButton:settingButton]; 
    [self.headViewUp addSubview:settingButton]; 
    UIButton *nightButton=[self setFrame:CGRectMake(yScreenWidth/4, 0, yScreenWidth/4, 50) title:@"白天" image:@"Menu_Day"]; 
    nightButton.tag=6; 
    **[nightButton addTarget:self 
       action:@selector(aButtonMethod:) 
    forControlEvents:UIControlEventTouchUpInside];** 
    [self.headViewDown addSubview:nightButton]; 
} 

または

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     LeftMenuView *leftView=[LeftMenuView createLeftMenuView]; 
     leftView.userInteractionEnabled=YES; 
     self.leftView=leftView; 
     [self.view addSubview:leftView]; 
     //nightButton 
     UIButton *nightButton=[self.leftView viewWithTag:6]; 
     [nightButton addTarget:self action:@selector(touchButton:) forControlEvents:UIControlEventTouchUpInside]; 
     leftView.userInteractionEnabled=YES; 
[nightButton addtoSubView:self.view] 
     //set 
     UIButton *settingButton=[self.leftView viewWithTag:4]; 
     [settingButton addTarget:self.leftView action:@selector(push) forControlEvents:UIControlEventTouchUpInside]; 
[settingButton addtoSubView:self.view] 
     } 

を必要としますが、基本的に同じボタンを作成

[button addTarget:self 
      action:@selector(aButtonMethod:) 
forControlEvents:UIControlEventTouchUpInside]; 

対応するメソッドを使用して、ボタンのターゲットを追加する必要があります2回、1セットだけはターゲットを追加し、もう1セットはビューに追加しないでください

+0

- (void)viewDidLoadに追加します。 – yangOne

+0

あなたのviewDidLoadでは、ボタンをaddボタンのビューに追加しません。ターゲットを追加しません – yawnobleix

+0

' - (void)addButton'はUIViewのクラスにあります。 UIViewクラス?今はviewDidLoadでこれを追加しますが、クリックすることはできません。私はGithubにプロジェクトを投稿します。あなたのViewController.mの – yangOne

1

あなたのコードでターゲットを設定しながら、あなたは間違いをしています。 この

[settingButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

のように行ってくださいはsettingButton.userInteractionEnabled=YES;

今すぐ

-(void)buttonPressed:(id) sender 
{ 

    UIButton *btn=(UIButton*) sender; 


} 
関連する問題