2012-01-09 8 views
15

Come è possibile utilizzare il metodo touchesBegan: withEvent: nella classe UITableViewController?tocchi Metodo Began non chiamato nella classe UITableViewController in iPhone

UITableViewController è una sottoclasse della classe UIViewController. Quindi, perché il metodo non funziona in UITableViewController?

+0

Dove si desidera utilizzare questo metodo in tableviewcontroller? –

+0

ha già risposto a questo http://stackoverflow.com/questions/5382683/why-does-my-uitableview-not-respond-to-touchesbegan –

+0

sottoclasse UITableView e implementa i tocchi. Inizia lì. Funzionerà indolore. – samfisher

risposta

6

touchBegan è anche un metodo UIView oltre ad essere un metodo UIViewController.

per sovrascriverlo è necessario creare sottoclasse UIView o UITableView e non i controller.

+18

I documenti Apple dicono che UITableViewController è un UIViewController che è un UIResponder. UIResponder ha tocchi Began: withEvent – finneycanhelp

4

touchBegan è un metodo UIView e UITableViewCell piuttosto che un UIViewController & metodo UITableViewController. in modo da poter creare la classe personalizzata per UITableViewCell riconosce l'evento touch e tocco delegato funziona per me.

//TableViewCell.h 

#import <UIKit/UIKit.h> 

@class Util; 

@interface TableViewCell : UITableViewCell { 

} 
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier; 

@end 
    //TableViewCell.m 
#import "TableViewCell.h" 
@implementation TableViewCell 

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier  format:(NSString*)ec_format{ 

    if (self) { 
     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 

    } 

    return self; 
} 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
//you receive touch here 
    NSLog(@"Category Touch %@",self.frame); 


} 

avere una buona giornata

+0

questo non funzionerà in quanto tableview assorbirà il tocco e non raggiungerà mai i touchBegan – samfisher

+0

prima di commentare e votare controlla il codice se funziona o no, TableViewCell è la sottoclasse di UIView quindi se risposta UIView per il tocco allora dovrebbe essere per TableViewCell Justify !!! –

+0

Questo codice non funzionerà mai come spiegato dai commenti di @balakrishnan. Entrambi i loro commenti sono completamente corretti. Ho persino provato il codice per curiosità e sì non funziona –

23

Ho avuto un problema simile, e ha trovato un approccio diverso che non comporta la creazione di sottoclassi UITableView. Un altro modo per farlo è aggiungere un riconoscitore di gesti alla vista di UITableViewController.

ho messo questo codice nella viewDidLoad del UITableViewController:

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[self.view addGestureRecognizer:tap]; 

e realizzato il gestore di eventi:

- (void)handleTap:(UITapGestureRecognizer *)recognizer 
{ 
    // your code goes here... 
} 

So che questa soluzione doesnt utilizzare touchesBegan, ma ho scoperto che era una soluzione semplice per lo stesso problema.

+0

Questo non si attiva solo quando si solleva il dito dallo schermo? –

4

Ecco una soluzione di sottoclasse UITableView che ha funzionato per me. Fare una sottoclasse di UITableView e sovrascrivere hitTest: withEvent: come sotto:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 

    static UIEvent *e = nil; 

    if (e != nil && e == event) { 
     e = nil; 
     return [super hitTest:point withEvent:event]; 
    } 

    e = event; 

    if (event.type == UIEventTypeTouches) { 
     NSSet *touches = [event touchesForView:self]; 
     UITouch *touch = [touches anyObject]; 
     if (touch.phase == UITouchPhaseBegan) { 
      NSLog(@"Touches began"); 
     } 
    } 
    return [super hitTest:point withEvent:event]; 
} 
2

a Swift - mi sono imbattuto in questa domanda durante la ricerca di una soluzione rapida 2. La risposta postata da @Steph Sharp mi ha aiutato a risolvere il problema in Swift, quindi ho pensato di postarlo qui. Qui si va:

class CalcOneTableViewController: UITableViewController { 
     override func viewDidLoad() { 
     super.viewDidLoad() 
     let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
     self.view.addGestureRecognizer(tap) 
} 

Funzione

func handleTap(recognizer: UITapGestureRecognizer) { 
    // Do your thing. 
} 
Problemi correlati