को छूने वाला टेक्स्ट प्राप्त करें जिसमें मेरे पास UILabel है जिसमें कुछ पाठ और 2 महीने के नाम हैं जैसे "जनवरी और जुलाई महीने में, सूर्य चमक चोटी होगी" मैं उप-वर्गीकृत उइलाबेल और इसमें टच इवेंट जोड़ा गया । अब मैं उस पाठ के नीचे शब्द प्राप्त करना चाहता हूं जहां उपयोगकर्ता स्पर्श करता है और पता लगाता है कि उपयोगकर्ता जनवरी/जुलाई को छुआ था या नहीं। क्या यह संभव है?उइलाबेल स्पर्श करें और
उत्तर
मुझे लगता है कि आप UITextInputProtocol के लिए प्रलेखन में जो खोज रहे हैं उसे आप पाएंगे।
कुछ और उच्च स्तर की जानकारी के लिए, ऐप्पल के Text, Web and Editing Guide देखें, विशेष रूप से "यूआईटीएक्स्ट इनपुट कार्यान्वयन के एक मार्गदर्शित दौरे" शीर्षक वाले अनुभाग में। यह चर्चा करता है कि आप पाठ में अनुक्रमित पदों को कैसे बना सकते हैं, और स्पर्श करते हैं कि वे किस पाठ स्थिति को निकटतम स्थान पर ले गए हैं।
ऐप्पल का संदर्भ नमूना अनुमानित है जिसे SimpleTextInput
कहा जाता है, लेकिन मुझे यह प्रतीत नहीं होता है। मैं देख रहा हूँ।
मैंने यूआईएलएबल के शीर्ष पर पारदर्शी UIViews डालकर इस समस्या को संभाला जो स्पर्श घटनाओं को संभालने के लिए वायर्ड थे। आप पाठ के प्रासंगिक हिस्सों के आकार की गणना करके हिट जोन लेबल की स्थिति और आकार को समायोजित कर सकते हैं। इस दृष्टिकोण में आपके हिट जोन के आकार को ट्विक करने में सक्षम होने का लाभ भी है जिससे उन्हें मोटा उंगलियों के साथ टैप करने के लिए बड़ा और इतना आसान बना दिया जा सके।
मैंने आपके प्रश्न को लागू किया है, बस my blog पर मज़े के लिए।
बस मैंने UILabel
को touchEnded
जोड़कर, स्पर्श स्थिति और अक्षर स्थिति को पहचानने के लिए उपclassed है।
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[touches allObjects] objectAtIndex:0];
CGPoint pos = [touch locationInView:self];
int sizes[self.text.length];
for (int i=0; i<self.text.length; i++)
{
char letter = [self.text characterAtIndex:i];
NSString *letterStr = [NSString stringWithFormat:@"%c", letter];
CGSize letterSize = [letterStr sizeWithFont:self.font];
sizes[i] = letterSize.width;
}
int sum = 0;
for (int i=0; i<self.text.length; i++)
{
sum += sizes[i];
if (sum >= pos.x)
{
[ _delegate didLetterFound:[ self.text characterAtIndex:i] ];
return;
}
}
}
आशा इस
चियर्स मदद करता है।
मुझे मूल पोस्टर के समान समस्या थी। मैं चाहता था कि उपयोगकर्ता UILabel में लंबे समय तक दबाए रखने में सक्षम हो जो स्ट्रिंग की अल्पविराम से अलग सूची प्रदर्शित कर रहा था, और निकटतम संलग्न कॉमा के बीच स्पर्श स्थान से संबंधित उप-स्ट्रिंग निकालें।
समस्या यह है कि UILabel UITextInput प्रोटोकॉल को लागू नहीं करता है, अन्यथा कार्यान्वयन सरल होगा।
मुझे मिले सुझाए गए किसी भी कामकाज को पसंद नहीं आया, इसलिए मैंने अपने स्वयं के समाधान के साथ आने का फैसला किया। कुछ विचार और शोध के बाद, मुझे एहसास हुआ कि UILabel UITextInput का समर्थन नहीं करता है, UITextView करता है। मैं UITextViews के साथ यूआई में सभी UILabels को प्रतिस्थापित नहीं करना चाहता था, इसलिए मैंने सोचा, "दृश्यमान रूप से समान टेक्स्ट प्रतिपादन सेटिंग्स के साथ, प्रोग्राम के रूप में प्रोग्राम के रूप में UITextView क्यों नहीं बनाते हैं, और स्पर्श बिंदु को मैप करने के लिए इसके UITextInput विधियों का उपयोग करते हैं वांछित उप-स्ट्रिंग? "।
यह मेरे दृष्टिकोण से आदर्श समाधान साबित हुआ।
मैं UILabels करने के लिए एक UILongPressGestureRecognizer जुड़ा हुआ है और इशारा हैंडलर में निम्नलिखित फ़ंक्शन को कॉल करें:
-(NSString*)commaDelineatedTextAtTouchPosition:(UILongPressGestureRecognizer*)longPress
{
UILabel *gestureRecipient = (UILabel*)longPress.view;
UITextView *textRegionClone = [[UITextView alloc] initWithFrame:gestureRecipient.frame];
// tweak the text view's content area to get the same rendering (placement and wrapping)
textRegionClone.textContainerInset = UIEdgeInsetsMake(0.0, -5.0, 0.0, -5.0);
// copy the label's text properties
textRegionClone.text = gestureRecipient.text;
textRegionClone.font = gestureRecipient.font;
[textRegionClone setNeedsDisplay];
CGPoint loc = [longPress locationInView:gestureRecipient];
UITextPosition *charR = [textRegionClone closestPositionToPoint:loc];
id<UITextInputTokenizer> tokenizer = textRegionClone.tokenizer;
UITextRange *searchRange = [tokenizer rangeEnclosingPosition:charR withGranularity:UITextGranularityCharacter inDirection:UITextStorageDirectionBackward];
NSString *commaEnclosedText = @"";
if (searchRange != nil) {
NSString *tapChar = [textRegionClone textInRange:searchRange];
if ([tapChar isEqualToString:@","]) { // tapped right on a ","
// move the end of the range to immediately before the ","
searchRange = [textRegionClone textRangeFromPosition:searchRange.start toPosition:[textRegionClone positionFromPosition:searchRange.end offset:-1]];
}
UITextPosition *docStart = textRegionClone.beginningOfDocument;
// search back to find the leading comma or the beginning of the text
do {
searchRange = [textRegionClone textRangeFromPosition:[textRegionClone positionFromPosition:searchRange.start offset:-1] toPosition:searchRange.end];
commaEnclosedText = [textRegionClone textInRange:searchRange];
}
while (([searchRange.start isEqual:docStart] == NO) && ([commaEnclosedText characterAtIndex:0] != ','));
// now search forward to the trailing comma or the end of the text
UITextPosition *docEnd = textRegionClone.endOfDocument;
while (([searchRange.end isEqual:docEnd] == NO) && ([commaEnclosedText characterAtIndex:commaEnclosedText.length - 1] != ',')) {
searchRange = [textRegionClone textRangeFromPosition:searchRange.start toPosition:[textRegionClone positionFromPosition:searchRange.end offset:1]];
commaEnclosedText = [textRegionClone textInRange:searchRange];
}
commaEnclosedText = [[commaEnclosedText stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@","]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
return commaEnclosedText;
}
केवल बात यह है कि इस तकनीक के बारे में थोड़ा hacky है आप में प्रतिपादन हाथ tweak करना है TextContainerInset क्षेत्र को समायोजित करके UITextView। अन्यथा आप UILextView में पाठ के समान रैपिंग और प्लेसमेंट को ठीक नहीं करते हैं जैसा कि आप UILabel में करते हैं। अन्यथा, यह उचित जेनेरिक कोड है जो किसी और के लिए काम करना चाहिए।
- (void)tapped:(UITapGestureRecognizer *)tap
{
CGPoint location = [tap locationInView:_label];
NSDictionary *attribute = @{NSFontAttributeName: _label.font};
CGFloat width = 0;
for (int i = 0; i substringWithRange:NSMakeRange(i, 1)];
CGSize lettersize = [letterStr sizeWithAttributes:attribute];
width += lettersize.width;
if (width >= location.x) {
NSLog(@"str: %@", letterStr);
break;
}
}
}
- 1. उइलाबेल:
- 2. बटन छुपाएं और स्पर्श
- 3. एक दृश्य को स्पर्श करें और खींचें
- 4. UILongPressGestureRecognizer स्पर्श और होल्ड
- 5. Sencha स्पर्श और चार्ट
- 6. स्पर्श
- 7. स्पर्श
- 8. UIScrollView स्पर्श बनाम सबव्यूव स्पर्श
- 9. UIBarButtonItem, विशेष स्पर्श सेट करें
- 10. स्पर्श घटना अनुकरण कैसे करें?
- 11. स्पर्श और माउस (उदा। सतह)
- 12. UIPanGestureRecognizer विधि में वर्तमान स्पर्श बिंदु और पिछले स्पर्श बिंदु कैसे प्राप्त करें?
- 13. Jquery टूल्स क्षैतिज केवल स्पर्श लंबवत स्पर्श
- 14. का उपयोग कर: counter_cache और: उसी संगठन में स्पर्श करें
- 15. कोको स्पर्श
- 16. कोको स्पर्श
- 17. स्पर्शों के बीच लगातार तरीके से स्पर्श को ट्रैक करने के लिए कैसे करें: और स्पर्श करें :?
- 18. UIImageView के माध्यम से स्पर्श करें?
- 19. UIPanGestureRecognizer से मूल स्पर्श स्थान प्राप्त करें
- 20. MkMapView स्पर्श पर एक पिन ड्रॉप करें
- 21. UIScrollView में स्पर्श विलंब को छोटा करें?
- 22. cocos2d में बहु स्पर्श कैसे सक्षम करें?
- 23. emacs में वर्तमान फ़ाइल "स्पर्श करें"
- 24. UIView, इसका पर्यवेक्षण और स्पर्श बेगन:
- 25. सेवा स्पर्श स्पर्श/घटनाओं के लिए कैसे सुन सकती है?
- 26. मैं स्पर्श कैसे अक्षम करूंगेगन: बहु स्पर्श के लिए?
- 27. UILabel स्पर्श करने योग्य
- 28. UISlider पर स्पर्श UIScrollView
- 29. माउस क्लिक (या स्पर्श) घटनाओं जहां स्क्रीन चमक हर आप पर क्लिक करें/स्पर्श/mousedown एचटीएमएल 5, Phonegap और एंड्रॉयड
- 30. UIScrollView स्पर्श को रोकता हैगन, स्पर्श करता है, स्पर्श, दृश्य नियंत्रक पर प्रदर्शित
क्या आपके पास इसका उपयोग करने के तरीके पर कोई नमूना या ट्यूटोरियल है? – Satyam
हे, सेब ने नमूना कोड का उल्लेख किया - यह देखने का प्रयास कर रहा हूं कि अब मैं इसे पा सकता हूं या नहीं। –
अब (2011-01-19) यह यहां उपलब्ध है: http://developer.apple.com/library/ios/#samplecode/SimpleTextInput/Introduction/Intro.html – Stephan