2016-11-14 2 views
0

Я создаю menuView в self.view, menuView имеет два subViews, которые являются UIView. Этот UIView содержит 4 UIButton, но я не могу щелкнуть ни одной из них. userInteractionEnabled установить ДА, установить фрейм кнопки в поле «Отладка». код:Невозможно нажать кнопку в 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)]; 
} 

способ clilk кнопка не работает.

+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

Вы должны добавить цель для вашей кнопки с соответствующим методом

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

Этот код необходим следующий

-(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] 
     } 

вы существенно создать ту же самую кнопку дважды, но только для одного набора добавьте цель, а для другого набора вы не добавите их в вид

+0

Я добавляю его в - (void) viewDidLoad. С тегом кнопки – yangOne

+0

В вашем представленииDidLoad вы не добавляете кнопку в представление в своем addhutton mehtod, вы не добавляете цель – yawnobleix

+0

'- (void) addButton' находится в классе UIView. Должен ли я добавить метод click в Класс UIView? и я добавляю его в viewDidLoad только сейчас, но он тоже не может щелкнуть.Я публикую проект в Гитубе. – yangOne

1

вы делаете ошибку при установке цели в вас код. пожалуйста как этот

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

набор settingButton.userInteractionEnabled=YES;

Теперь обрабатывать событие щелчка, как показано ниже

-(void)buttonPressed:(id) sender 
{ 

    UIButton *btn=(UIButton*) sender; 


} 
Смежные вопросы