Пользовательский UIButton не работает - PullRequest
0 голосов
/ 29 августа 2011

После просмотра поста на эту простую тему я все никак не могу понять, что я тут не так сделал. Я пытаюсь заставить кнопки повторять одно и то же действие в одном и том же viewController.

Когда вид появляется на экране, кнопки не щелкают (или, по крайней мере, NSLog не пишет в консоль, как это происходит при первом вводе этого кода).

- (IBAction)answer: (id) sender{
NSLog(@"The Number is: %d\n",qNumber);
qNumber+=1;

UIView *newView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
[newView setUserInteractionEnabled:TRUE];
UIImage *buttonImage = [UIImage imageNamed:@"pink_button.png"];
UIImageView *buttonImageView = [[[UIImageView alloc] initWithFrame:CGRectMake(23, 294, 72, 37)] autorelease];
[buttonImageView setImage:buttonImage];

UILabel* buttonLabel = [[[UILabel alloc] initWithFrame:CGRectMake(23, 294, 72, 37)] autorelease];
buttonLabel.text = @"newLow";
buttonLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size: 15.0];
buttonLabel.textColor = [UIColor blackColor];
buttonLabel.backgroundColor = [UIColor  clearColor];
buttonLabel.textAlignment = UITextAlignmentCenter;

lowButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[lowButton addSubview:buttonImageView];
[lowButton addSubview:buttonLabel];
[lowButton addTarget:self action:@selector(answer:) forControlEvents:UIControlEventTouchUpInside];

[newView addSubview:lowButton];
self.view = newView;
}

Спасибо за любую помощь, которую вы можете оказать ... даже если я пропустил что-то простое: -)

Последнее обновление кода:

lowButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[newView addSubview:buttonImageView];
[newView addSubview:buttonLabel];
[lowButton addTarget:self action:@selector(answer:) forControlEvents:UIControlEventTouchUpInside];

[newView addSubview:lowButton];
[self.view bringSubviewToFront:lowButton];
self.view = newView;

Тем не менее, когда кнопка нажата, она не вводит код действия.

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Ваша кнопка нуждается в кадре. Вы не можете нажать кнопку без рамки.

lowButton.frame = CGRectMake(23, 294, 72, 37);

Кроме того, когда вы добавляете метку и изображение к этой кнопке, их рамка должна иметь x и y 0.

UIImageView *buttonImageView = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 72, 37)] autorelease];
...
UILabel* buttonLabel = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 72, 37)] autorelease];
...

Но могу ли я спросить, почему вы добавляете новые UIImageView и UILabel в UIButton, когда он имеет свойства метки и фона?

Редактировать вот вам исправленный код:

UIView *newView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];

lowButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[lowButton setImage:[UIImage imageNamed:@"pink_button.png"] forState:UIControlStateNormal];
[lowButton setTitle:@"newLow" forState:UIControlStateNormal];
[lowButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[lowButton.titleLabel setFont:[UIFont boldSystemFontOfSize:15.0]];
[lowButton addTarget:self action:@selector(answer:) forControlEvents:UIControlEventTouchUpInside];

[newView addSubview:lowButton];
self.view = newView;

Обратите внимание, что я также удалил [newView setUserInteractionEnabled:TRUE];, так как он не нужен, так как он включен по умолчанию.

0 голосов
/ 29 августа 2011

Подвиды вашей пользовательской кнопки закрывают кнопку, поэтому она не получает никаких кликов.Попробуйте добавить все подпредставления к newView, а не к lowButton (включая сам lowButton), а затем вызовите

[self.view bringSubViewToFront:lowButton];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...