2015-05-19 4 views
2

У меня проблема с программным обеспечением iOS UIButton.iOS UIButton клик не работает

У меня есть UIButton:

- (UIButton *)compareButton 
{ 
    if (!_compareButton) 
    { 
     NSString *title = TITLE; 

     NSDictionary *attributes = TITLE_ATTRIBUTES; 

     NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title attributes:attributes]; 

     _compareButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 20.0f, 100.0f, 44.0f)]; 

     _compareButton.backgroundColor = [UIColor redColor]; 

     [_compareButton setAttributedTitle:attributedTitle forState:UIControlStateNormal]; 
     [_compareButton addTarget:self action:@selector(buttonCompareClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    } 

    return _compareButton; 
} 

UIButton щелчки должны быть обработаны методом

- (void)buttonCompareClicked:(UIButton *)sender 

Кроме того, у меня есть UIView:

- (UIView *)header 
{ 
    if (!_header) 
    { 
     UIView *header = [[UIView alloc] init]; 

     header.backgroundColor = [UIColor whiteColor]; 

     [self.view addSubview:header]; 

     _header = header; 
    } 

    return _header; 
} 

Моя кнопка подвид из вид:

[self.header addSubview:self.compareButton]; 

Все взаимодействия пользователя включены:

self.view.userInteractionEnabled = YES; 
self.header.userInteractionEnabled = YES; 
self.compareButton.userInteractionEnabled = YES; 

Несмотря на это, нажатие кнопки не вызывает вызов метода.

Где может быть проблема с этим?

+0

Вы установили соединение IBAction? – abhishekkharwar

+0

Используете ли вы раскадровки или любой файл XIB, содержащий кнопку? –

+0

Я не вижу, где вы устанавливаете фрейм заголовка, или добавляете ограничения, чтобы выложить его с помощью автоматического макета. Он может иметь нулевую ширину и высоту. Попробуйте установить свойство 'backgroundColor', чтобы вы могли видеть, имеет ли он допустимый размер. – johnpatrickmorgan

ответ

2

Я думаю, что проблема с self.header. Вам нужно установить рамку.

self.header.frame = CGRectMake(0, 0, 320, 80); 

После этого ваша кнопка должна начать регистрацию касания.

ПОЧЕМУ?

Хороший вопрос.

Как вы, слой self.header, имеет свойство maskToBounds, которое по умолчанию установлено в no, поэтому все виды, которые вы добавляете внутри, видны header. Но так как ваш вид header не имеет области для подключения, это делает ненужным subviews. Вот почему ваша кнопка не регистрирует прикосновение.

+0

Большое спасибо за отличный ответ с объяснением! –

+0

Но если заголовок не имеет области, если он не устанавливает ее, как видны субвью? –

+0

@BogdanPop прочитал первое предложение объяснения. – rptwsthi

1

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

[self.header addSubview:[self compareButton]]; 

Надеется, что это может помочь вам .....

+0

Зачем это нужно? –

+0

self.compareButton на самом деле называет [self compareButton], так что это ничего не изменит –

+0

И это ничего не меняет –

1
//Better to Use Below lines 
    _comparebutton=[UIButton buttonwithtype:UIButtontyperoundrect]; 
    [_comparebutton setframe:CGRectMake(0.0f, 20.0f, 100.0f, 44.0f)]; 
    //instead of 
    //_compareButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 20.0f, 100.0f, 44.0f)]; 
2

1-Вы должны установить рамку вашего зрения заголовка:

UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 20.0f, 100.0f, 44.0f)]; 

2-Так что в этом случае , установите рамку вашей кнопки относительно вида заголовка:

_compareButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 44.0f)]; 

3-не забудьте установить свойство compareButton к сильным:

@property (nonatomic, strong) UIButton *compareButton; 
+0

И, пожалуйста, сообщите нам, если это сработало –

1

Измените код, как показано ниже

- (UIView *)header 
{ 
    if (!_header) 
    { 
     UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 44.0f)]; 

     header.backgroundColor = [UIColor whiteColor]; 

     [header addSubView:[self compareButton]];//add this line of code 

     [self.view addSubview:header]; 

     _header = header; 
    } 

    return _header; 
} 

// И изменить

- (UIButton *)compareButton 
{ 
    if (!_compareButton) 
    { 
     NSString *title = TITLE; 

     NSDictionary *attributes = TITLE_ATTRIBUTES; 

     NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title attributes:attributes]; 

     _compareButton=[UIButton buttonWithType:UIButtonTypeCustom];//modified 
     _compareButton.frame=CGRectMake(0.0f, 20.0f, 100.0f, 44.0f);//modified 

     _compareButton.backgroundColor = [UIColor redColor]; 

     [_compareButton setAttributedTitle:attributedTitle forState:UIControlStateNormal]; 
     [_compareButton addTarget:self action:@selector(buttonCompareClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    } 

    return _compareButton; 
} 

-(IBAction)buttonCompareClicked:(id)sender 
{ 
    NSLog(@"@@@@@@@@@Button Compare [email protected]@@@@@@"); 
} 

Надеются, что это устраняет проблему ....!

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