Frage

Ich habe eine UITextView, die ich für einen einzigen Hahn erkennen soll.

Es sieht aus wie ich mit einfach überschreiben touchesEnded:withEvent und Überprüfung [[touches anyObject] tapCount] == 1 wäre in Ordnung, aber dieses Ereignis nicht einmal Feuer.

Wenn ich die 4 Veranstaltungen wie diese außer Kraft setzen:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    NSLog(@"touchesBegan (tapCount:%d)", touch.tapCount);
    [super touchesBegan:touches withEvent:event];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
        NSLog(@"touches moved");
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    NSLog(@"touchesEnded (tapCount:%d)", touch.tapCount);
        [super touchesEnded:touches withEvent:event];
}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
        NSLog(@"touches cancelled");
}

Ich erhalte eine Ausgabe wie folgt aus:

> touchesBegan (tapCount:1)
> touchesCancelled 
> touchesBegan (tapCount:1) 
> touches moved 
> touches moved
> touches moved 
> touchesCancelled

Es scheint, dass ich nie die touchesEnded Veranstaltung.

Irgendwelche Ideen?

War es hilfreich?

Lösung 2

Update: Ich landete mit der Technik hier: https://devforums.apple.com/message/94569#94569

Ich bin nicht sicher, ob dies ein Fehler ist oder nicht, aber die UITextView braucht die Berührungsereignisse nutzen, um das Popup-Menü für die Kopie zu tun und für 3.0 einfügen, so dass könnte erklären, warum es dieses Ereignis schluckt.

ziemlich lahm, wenn Sie mich fragen.

Update: Ich gebloggt dies etwa hier: http: / /benscheirman.com/2009/07/detecting-a-tap-on-a-uitextview

Andere Tipps

I subclassed UITextView wie so, die auch bei IOS 5.0.1 scheint zu funktionieren. Der Schlüssel ist touchesBegan auch außer Kraft zu setzen, nicht nur touchesEnded (das ist, was ich wirklich interessiert bin).

@implementation MyTextView


- (id)initWithFrame:(CGRect)frame {
    return [super initWithFrame:frame];
}

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event { 
    // If not dragging, send event to next responder
    if (!self.dragging) 
        [self.nextResponder touchesBegan: touches withEvent:event]; 
    else
        [super touchesBegan: touches withEvent: event];
}

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event { 
    // If not dragging, send event to next responder
    if (!self.dragging) 
        [self.nextResponder touchesEnded: touches withEvent:event]; 
    else
        [super touchesEnded: touches withEvent: event];
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
    if (action == @selector(paste:))
        return NO;
    if (action == @selector(copy:))
        return NO;
    if (action == @selector(cut:))
        return NO;
    if (action == @selector(select:))
        return NO;
    if (action == @selector(selectAll:))
        return NO;
    return [super canPerformAction:action withSender:sender];
}

- (BOOL)canBecomeFirstResponder {
    return NO;
}

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

Sie können deaktivieren Cut / Copy / Paste durch die canPerformAction:withSender: Methode überschrieben, so dass Sie konnte einfach zurückgeben NO für alle Aktionen wollen Sie nicht ermöglichen.

Sehen Sie die UIResponder Dokumentation ...

Wir hoffen, dass Ihre Berührungen aus dem Verzehr zu stoppen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top