2009-12-04 1 views
2

Как определить касания в UIviewController для UIView только с кодом (без интерфейса Builder)?Обнаружение касания UIView с помощью интерфейса Builder

Я нашел метод touchesBegan, но он никогда не называется. Я не инициализировал ничего другого в этом методе.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
+1

touchesBegan является частью UIView, и вы должны иметь штрихи включены для того, чтобы получить штрихи к ViewController вероятно, вы должны иметь представление сказать С ontroller касаний – Daniel

+0

благодарит приятеля. Это очень полезно ...! –

ответ

6
#import "TouchView.h" 


//TouchView.h 

#import <Foundation/Foundation.h> 
#import "TouchViewDelegate.h" 

@interface TouchView : UIView { 
    id <TouchViewDelegate> delegate; 
} 
@property (retain) id delegate; 
@end 

//TouchView.m 

@implementation TouchView 
@synthesize delegate; 

-(id) initWithFrame:(CGRect)frame 
{ 
    self.userInteractionEnabled = YES; 
    return self; 
} 
-(id) initWithCoder:(NSCoder *)aDecoder 
{ 
    self.userInteractionEnabled = YES; 
    return self; 
} 
-(void) awakeFromNib 
{ 
    self.userInteractionEnabled = YES; 
} 
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [delegate touchDown:self]; 
} 
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [delegate touchUp:self]; 
} 
@end 

//TouchViewDelegate.h 
#import <UIKit/UIKit.h> 


@protocol TouchViewDelegate 
-(void) touchDown:(id) sender; 
-(void) touchUp:(id)sender; 
@end 
+0

Hello @ madmik3. Хороший фрагмент, но как я могу назначить делегата? –

+2

Собственность должна использовать «присваивать», а не сохранять. Чтобы установить делегат TouchView * tv = ....; tv.delegate = self; ... –

1

Я прочитал бы Touch Events sections руководства по программированию приложений для iPhone.

UIViewController и UIView оба являются UIResponders, который отвечает за обработку событий.

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

0

В вашем методе инициализации:

self.userInteractionEnabled = YES; 
0

Коррекция madmik3,

вы пропустили супер вызов в вашем initWithFrame.

-(id) initWithFrame:(CGRect)frame { 
if (self = [super initWithFrame:frame]) { 
self.userInteractionEnabled = YES; 
} return self; 
}