UIButton с пользовательским представлением-addTarget: действие: forControlEvents: не работает

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

  1. создал label1
  2. создал label2
  3. создано customView (UIView)
  4. добавлена label1 и label2 на пользовательском представлении
  5. создан myCustomButton (UIButton)
  6. добавлен пользовательский вид на myCustomButton

я уже сделал userInteractionEnable для custom_View, label1 и label2.

добавил
[myCustomButton addTarget:self action:@selector(OnButtonClick:) forControlEvents:UIControlEventTouchUpInside];

и

-(void)OnButtonClick:(UIButton *)sender
{
}

но выше функция никогда не вызывается, даже когда я нажмите кнопку. Есть решение?

2 ответов


просто небольшая проблема с вашим кодом мой друг, вам просто нужно добавить только одну следующую строку в свой код, забудьте setUserInteractionEnabled:NO to UIView Это позволит вам нажать на кнопку

UILabel *lbl1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[lbl1 setText:@"ONe"];
UILabel *lbl2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 100, 30)];
[lbl2 setText:@"Two"];

UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 130)];
[view setUserInteractionEnabled:NO];

[view addSubview:lbl1];
[view addSubview:lbl2];

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn addSubview:view];
[btn setFrame:CGRectMake(0, 0, 200, 130)];
[btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:btn];

Выберите Способ

-(void)click
{
    NSLog(@"%s",__FUNCTION__);
}

вместо того, чтобы создавать customView (экземпляр UIView) , вы добавляете customView как экземпляр UIControl, а также addTarget в customView,

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(10,10,300,300)];

UIControl *customView = [[UIControl alloc] initWithFrame:CGRectMake(0,0,300,300)];
[customView addTarget:self action:@selector(customViewClicked:) forControlEvents:UIControlEventTouchUpInside]; 

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10,10,100,100)];
[label1 setText:@"Hello How are you ?"];

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10,150,100,100)];
[label1 setText:@"I am fine Thnank You!"]

[customView addSubView:lebel1];
[customView addSubView:lebel2];

теперь в методе CustomViewClicked

-(void)customViewClicked:(id)sender
{
     UIControl *senderControl = (UICotrol *)sender;

     NSLog(@"sender control = %@",senderControl);
}

надеюсь, что это поможет вам.