2015-03-27 5 views
0

У меня возникла проблема с добавлением события click в моем коде.Добавить событие click в код

На главной UIView я добавил некоторые подвид (UIView) в коде:

UIView *btnContainer = [UIView new]; 
iconButton.origin.x = (indexOfIcon % rowCount + 1) * leftPadding + (indexOfIcon % rowCount) * iconButton.size.width; 
iconButton.origin.y = (rowIndex + 1) * topPadding + rowIndex * iconButton.size.height; 
CGRect btnRect = iconButton; 
btnContainer.frame = btnRect; 
btnContainer.layer.borderColor = [[UIColor colorWithRed:74/255.0 green:174/255.0 blue:223/255.0 alpha:1] CGColor]; 
btnContainer.layer.borderWidth = 1; 
btnContainer.layer.cornerRadius = 6; 
[parent addSubview: btnContainer]; 

Теперь я хочу, чтобы добавить кнопку в подвид (UIView):

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(goToReport:)]; 
[btnContainer addGestureRecognizer: tapGesture]; 

Это делегат,

- (void) goToReport: (UIView *)sender 

Когда я нажимаю подвид (UIView), почему это бросить это исключение:: но он ничего не делает

Нагрузочный приложение из-за неперехваченного исключением 'NSInvalidArgumentException', причина: '- [__ NSCFType goToReport]: непризнанные селектор направлен например 0x788e46e0'

ответ

0

Что значит делегат? Пожалуйста, убедитесь, что в правильном месте вашей реализации. Я отлично проработал ваш код.

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIView *btnContainer = [UIView new]; 
    CGRect btnRect = CGRectMake(50, 50, 50, 50); 
    btnContainer.frame = btnRect; 
    btnContainer.layer.borderColor = [[UIColor colorWithRed:74/255.0 green:174/255.0 blue:223/255.0 alpha:1] CGColor]; 
    btnContainer.layer.borderWidth = 1; 
    btnContainer.layer.cornerRadius = 6; 
    [self.view addSubview: btnContainer]; 
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(goToReport:)]; 
    [btnContainer addGestureRecognizer: tapGesture]; 
} 

- (void) goToReport: (UIView *)sender { 
    NSLog(@"tapped"); 
} 

@end 

Хотя согласен с @aeskreis, ваше использование не рекомендуется.

+0

большое спасибо, я нашел проблему в goToReport. –

1

Есть два основных проблем здесь вызывают вас подножка.

1) Параметр вашего метода распознавания жестов должен быть UIGestureRecognizer, а не UIView, к которому он присоединен. Вы можете получить доступ к представлению, используя свойство «view» распознавателя. Пример:

- (void)someRecognizerCallback:(UIGestureRecognizer *)recognizer { 
    View *myView = recognizer.view; // This is my view 
} 

2) В этой ситуации я бы не рекомендовал использовать распознаватель жестов. Скорее, я бы рекомендовал использовать UIButton и использовать метод [UIButton addTarget: action: forControlEvent:]. Пример использование будет:

[someButton addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventTouchUpInside]; 

Если вы мертв набор на использование UIView (потому что, может быть, у вас есть пользовательские элементы управление или какая-либо другая причина), то попробуйте фиксируя тип параметра на вашем селекторе обратного вызова и посмотреть, если это решает ваш вопрос.

+0

спасибо, потому что мне нужно создать кнопку, это верхнее изображение, а внизу - метка, я не знаю, как создать такую ​​кнопку. –

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