1

Я работаю над одноразовым приложением iOS в Xcode 6 в течение нескольких дней и ударил блокпост, когда я пытаюсь добавить события касания. Вот что я пытаюсь сделать:Добавление жесты крана в UIImageView для изменения UILabel?

В раскадровке я создал UILabel и UIImageView, я хотел бы добавить жест выделения к UIImageView, чтобы при нажатии на изображение метка изменилась. Хотя я не очень удобный программирование в Objective-C, я понимаю, что я должен сначала приложить жест к UIImageView, который затем может обрабатываться моим методом обработчика событий. Вот что я пытался:

В ViewController.h файле:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 

    IBOutlet UIImageView *imageView; 
    IBOutlet UILabel *myLabel; 

} 

-(void)handleTap:(id)sender; 

@end 

В файле ViewController.m:

#import "ViewController.h" 

@interface ViewController() 
@end 

@implementation ViewController 

- (void)viewDidLoad { 

imageView.userInteractionEnabled = YES; 

UITapGestureRecognizer *pgr = [[UITapGestureRecognizer alloc] 
           initWithTarget:self 
             action:@selector(handleTap)]; 

[imageView addGestureRecognizer:pgr]; 

    [super viewDidLoad]; 
} 

- (void)handleTap:(UITapGestureRecognizer *)tapGestureRecognizer 
{ 
    myLabel.text = [NSString stringWithFormat:@"It Worked"]; 
} 

Что я ожидал, что произойдет MyLabel изменится, когда imageView был использован, myLabel и imageView связаны с UILabel и UIImageView соответственно. И я понимаю, что, возможно, я мог бы сэкономить много хлопот, просто добавив кнопку в ImageView, но я действительно пытаюсь заставить ее работать с событиями касания.

Я новичок в языке, и это первый раз, когда я пытался что-то построить. Я постарался быть настолько подробным, насколько это возможно при публикации, но если вам нужна дополнительная информация, я был бы рад предоставить их. Приветствуются детали, примеры кода и объяснения того, как сочетаются детали. Спасибо.

+1

Вы подключили розетку к этикетке в Interface Builder? –

+1

Также ... вам нужно создать эти IBOutlets как «@properties», а затем «@synthesize» их в вашей реализации. –

+0

@ ElGuapo не _need_, но это лучшая практика. @OP, если вы поместите точку останова в свой метод 'handleTap:', он попадает? – Stonz2

ответ

1
#import "ViewController.m" 

@interface ViewController() 
{ 
    IBOutlet UILabel *myLabel; 
    IBOutlet UIImageView *myImage; 
} 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(Tapped:)]; 
    tap.numberOfTapsRequired = 1; //You can change this is double tap ect.. 
    Red.cancelsTouchesInView = YES; 
    myImage.userInteractionEnabled = YES; //if you want touch on your image you'll need this 
    [myImage addGestureRecognizer:tap]; 
} 

-(void)Tapped:(UITapGestureRecognizer *)sender 
{ 
    myLabel.text = [NSString stringWithFormat:@"It Worked"]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 

@end 

Если вы игра еще не работает, вы не подключили свой ярлык и изображение к построителю интерфейса. Чтобы подключить их к построителю интерфейса, вы темнее сделаете и подключите его к нужному объекту в представлении, как на этом изображении, я нажимаю на точку и перетаскиваю ее на метку. image for connecting

1

Вам не хватает ':' знак жестов. Он должен выглядеть так:

... action:@selector(handleTap:)]; 

Если он не работает, то ваши IBOutlet соединения, вероятно, сделано неправильно. Вы должны увидеть маленькие круги с точками внутри в Xcode, если все сделано правильно. Check this sample image:

+0

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

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