2013-07-24 16 views
5

ich erfolgreich tippen Gesten auf einen Teil des UITextView mit dem folgenden Code hinzufügen könnte:Tap-Geste auf einen Teil der UILabel

UITextPosition *pos = textView.endOfDocument;// textView ~ UITextView 

for (int i=0;i<words*2-1;i++){// *2 since UITextGranularityWord considers a whitespace to be a word 

    UITextPosition *pos2 = [textView.tokenizer positionFromPosition:pos toBoundary:UITextGranularityWord inDirection:UITextLayoutDirectionLeft]; 
    UITextRange *range = [textView textRangeFromPosition:pos toPosition:pos2]; 
    CGRect resultFrame = [textView firstRectForRange:(UITextRange *)range ]; 

    UIView* tapViewOnText = [[UIView alloc] initWithFrame:resultFrame]; 
    [tapViewOnText addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(targetRoutine)]]; 
    tapViewOnText.tag = 125; 
    [textView addSubview:tapViewOnText]; 

    pos=pos2; 
} 

Ich möchte imitieren das gleiche Verhalten in einem UILabel. Das Problem ist, UITextInputTokenizer (verwendet, um die einzelnen Wörter zu tokenisieren) in UITextInput.h deklariert wird, und nur UITextView & UITextField entsprechen UITextInput.h; UILabel nicht. Gibt es eine Abhilfe dafür?

+0

hallo Freund, haben Sie die Benutzerinteraktionsverhalten von UILabel geprüft, da standardmäßig NO Anwenderwechsel von UILabel, müssen Sie es einrichten YES.Let mich wissen, funktioniert es oder nicht.!!! – NiravPatel

+0

Aktion auf einem ganzen UILabel ist kein Problem, es ist "Teil" von UILabel. – n00bProgrammer

+0

Bitte überprüfen Sie http://stackoverflow.com/questions/8811909/getting-the-word-touched-in-a-uilabel-uitextview/21577829#21577829 – TheTiger

Antwort

0

Sie könnten https://github.com/mattt/TTTAttributedLabel versuchen und einen Link zum Etikett hinzufügen. Wenn der Link gedrückt wird, erhalten Sie eine Aktion, sodass ein Teil des Label-Klicks nur funktioniert, wenn Sie den Link-Teil des Labels anpassen. Ich habe dies in der Vergangenheit versucht und es funktionierte einwandfrei, aber mein Client war nicht daran interessiert, eine Komponente von Drittanbietern zu verwenden, also kopierte diese Funktionalität mit UIWebView und HTML.

+0

Abschließend auf TTTAttributedLabel festgelegt. Es ist so schwer wie ein UITextView. :( – n00bProgrammer

+1

TTTAttributedLabel hat Höhe Probleme. Besonders wenn es um Emoji geht. – Mahouk

-2

Dies ist ein Basiscode für das Hinzufügen von UITapGestureRecognizer zu Ihrem Steuerelement;

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];   
[MyLabelName addGestureRecognizer:singleTap];   
[self.view addSubView:MyLabelName] 

Dies ist die Methode, wenn Sie Ihre MyLabelName angezapft nennen;

-(void)handleSingleTap:(UILabel *)myLabel 
{ 
    // do your stuff; 
} 
+0

Ich schätze Ihre Antwort, aber ich brauche keine Geste auf die gesamte Etikett, nur ein Teil davon. – n00bProgrammer

2

Eine Option wäre die Verwendung eines nicht editierbaren UITextView anstelle eines UILabel. Natürlich kann dies eine geeignete Lösung sein oder auch nicht, abhängig von Ihren genauen Bedürfnissen.

+0

UITextViews kommen nicht in Frage. Ich kann nur UILabels verwenden. – n00bProgrammer

+2

@ n00bProgrammierer, können Sie die UITextView wie UILabel verhalten. – Vignesh

4

Versuchen Sie dies. Lassen Sie Ihr Etikett label sein:

//add gesture recognizer to label 
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] init]; 
    [label addGestureRecognizer:singleTap]; 
    //setting a text initially to the label 
    [label setText:@"hello world i love iphone"]; 

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

UITouch *touch = [touches anyObject]; 
CGPoint touchPoint = [touch locationInView:self.view]; 

CGRect rect = label.frame; 
CGRect newRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width/2, rect.size.height); 

if (CGRectContainsPoint(newRect, touchPoint)) { 
    NSLog(@"Hello world"); 
} 
} 

Ein Klick auf das erste Halb von Label arbeiten (es gibt Protokollausgabe). Nicht die andere Hälfte.

+0

@ n00bProgrammierer - Sie können Ihren eigenen 'CGRect newRect' basierend auf Ihren Bedürfnissen erstellen. – iphondroid

2

Hier ist eine leichtgewichtige Bibliothek speziell für Links in UILabel FRHyperLabel.

Um einen Effekt wie dieses Ziel zu erreichen:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis blandit eros, sitzen amet vehicula justo. Nam bei Urna Neque. Maecenas ac semeu sem porta dictum nec vel tellus.

Verwendung Code:

//Step 1: Define a normal attributed string for non-link texts 
NSString *string = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis blandit eros, sit amet vehicula justo. Nam at urna neque. Maecenas ac sem eu sem porta dictum nec vel tellus."; 
NSDictionary *attributes = @{NSFontAttributeName: [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]}; 

label.attributedText = [[NSAttributedString alloc]initWithString:string attributes:attributes]; 


//Step 2: Define a selection handler block 
void(^handler)(FRHyperLabel *label, NSString *substring) = ^(FRHyperLabel *label, NSString *substring){ 
    NSLog(@"Selected: %@", substring); 
}; 


//Step 3: Add link substrings 
[label setLinksForSubstrings:@[@"Lorem", @"Pellentesque", @"blandit", @"Maecenas"] withLinkHandler:handler]; 
Verwandte Themen