UIButton не активен при вызове пользовательского представления

Я новичок в разработке iPhone, мне нужна помощь в понимании приведенного ниже, так как я могу создать newView, используя следующие

UIView *newView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 80, 30)]; 
newView.backgroundColor=[UIColor clearColor];
UIButton *newViewBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];


newViewBtn.frame = CGRectMake(newView.frame.origin.x+5,
                            newView.frame.origin.y+5,60,20);
[newView addSubview:newViewBtn];
[self.view addSubview:newView]; 

Код выше работает без проблем. Но когда я пытаюсь создать представление, используя следующее, представление создается правильно, но кнопка в представлении не активна.

int randNumX = arc4random() % 150;
int randNumY = arc4random() % 200;
UIView newView=[[UIView alloc]init];
newView.frame =CGRectMake(randNumX, randNumY, 80, 30);

newView.backgroundColor=[UIColor clearColor];

UIButton *newViewBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
newViewBtn.frame  = CGRectMake(newView.frame.origin.x+5
                         ,newView.frame.origin.y+5,60,20);
[newView addSubview:newViewBtn];
[self.view addSubview:newView];

и есть еще один сценарий, если изменить следующий код

 newViewBtn.frame = CGRectMake(newView.frame.origin.x+5
                          ,newView.frame.origin.y+5,60,20);

с приведенным ниже кодом приложение вылетает

 newViewBtn.frame =CGRectMake(randNumX+5,randNumY+5,60,20);

Любая помощь будет принята с благодарностью, заранее спасибо.

Я уже добавил следующий код

     newViewBtn addTarget:self action:@selector(btnclick:)forControlEvents:UIControlEventTouchUpInside];

     -(void)btnclick:(id)sender
     {
       //my code
     }

Он работает в первом случае:

Меня больше всего беспокоит, когда рисуется новый вид, почему кнопка в этом представлении не активна


person Shekhu    schedule 01.11.2013    source источник
comment
Вы добавили кнопку в представление? [newView addSubview:newViewBtn];   -  person GameDevGuru    schedule 01.11.2013
comment
@GameDevGuru: Да, я добавил кнопку   -  person Shekhu    schedule 01.11.2013
comment
@Aiden Вы пробовали мой код .. я чертовски уверен, что он вам поможет.   -  person Dharmbir Singh    schedule 01.11.2013
comment
Меня больше всего беспокоит, когда рисуется новый вид, почему кнопка в этом представлении не активна   -  person Shekhu    schedule 01.11.2013
comment
@Aiden Попробуйте мой ответ и посмотрите, получите ли вы ответ при нажатии кнопки.   -  person GameDevGuru    schedule 01.11.2013
comment
@GameDevGuru: в первом случае это работает, но во втором случае, когда я использую переменные randNum --> newView.frame = CGRectMake(randNumX, randNumY, 80, 30);. Кнопка появляется, но по-прежнему не может щелкнуть или нажать   -  person Shekhu    schedule 01.11.2013
comment
@Aiden Можете ли вы выбрать мой ответ, если он вам помог?   -  person GameDevGuru    schedule 02.11.2013


Ответы (6)


При добавлении пользовательского подпредставления в UIButton необходимо отключить свойство userInteractionEnabled.

customView.userInteractionEnabled = NO;

затем добавьте к своей кнопке.

[customButton addSubView:customView];

В противном случае ваше пользовательское представление перехватывает события касания перед кнопкой, поскольку оно добавляется в верхнюю часть стека представлений.

person SpaceTrucker    schedule 04.03.2016
comment
Должен быть принятый ответ. - person DawnSong; 02.12.2020

Здесь проблема заключается в строке ниже, так как новый дочерний вид должен соответствовать родительскому представлению.

    newViewBtn.frame =CGRectMake(randNumX+5,randNumY+5,60,20);

написание выше, как показано ниже, решило проблему

    newViewBtn.frame =CGRectMake(5,5,60,20);
person Shekhu    schedule 06.11.2013

Вы забыли это:

 UIButton *newViewBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
  [newViewBtn addTarget:self action:@selector(clickeMe) forControlEvents:UIControlEventTouchUpInside];

Пожалуйста, попробуйте это.

person McLand    schedule 01.11.2013
comment
Я тоже добавил это [newViewBtn addTarget:self action:@selector(btnclick:) forControlEvents:UIControlEventTouchUpInside]; } - person Shekhu; 01.11.2013
comment
Вы вошли в систему с помощью метода? - person McLand; 01.11.2013

Попробуйте следующий код...

int randNumX = arc4random() % 150;
int randNumY = arc4random() % 200;

UIView newView=[[UIView alloc]init];

newView.frame =CGRectMake(randNumX, randNumY, 80, 30);

newView.backgroundColor=[UIColor clearColor];

UIButton *newViewBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

newViewBtn.frame  = CGRectMake(0,0,60,20);

newViewBtn.center = newView.center;

[newViewBtn addTarget:self action:@selector(btnTapped:) forControlEvents:UIControlEventTouchUpInside];

[newView addSubview:newViewBtn];

[self.view addSubview:newView];


-(void)btnTapped:(id)sender
{
     NSLog(@"btnTapped");
}
person Nirav Gadhiya    schedule 01.11.2013

Я полагаю, вы забыли добавить цель (функция, вызываемая при нажатии кнопки):

 [newViewBtn addTarget:self action:@selector(yourfunction:) forControlEvents:UIControlEventTouchUpInside];

Убедитесь, что функция, на которую вы ориентируетесь, существует, иначе при нажатии произойдет сбой.

- (void) yourfunction {
    NSLog(@"Click Detected");
}
person GameDevGuru    schedule 01.11.2013

Вам нужно добавить цель, как это...

   UIButton *newViewBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
   newViewBtn.frame=CGRectMake(newView.frame.origin.x+5,newView.frame.origin.y+5,60,20);
   [newViewBtn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside]; // ---- add this line.....
   [newView addSubview:newViewBtn];

   -(void)btnPressed:(id)sender
   {
        NSLog(@"Btn Pressed");
   }
person Dharmbir Singh    schedule 01.11.2013