2011-03-09 10 views
14

Krumelurasked this question में प्राप्तकर्ता बबल व्यवहार को मेल करें। Mail.app के समान प्राप्तकर्ता बबल कैसे बनाएं। कृपया के नीचे स्क्रीनशॉट देखेंगे कि मैं क्या मतलब है:मेल.एप/थ्री 20

Mail.app picker bubble picture

Selected contact

मैं (देखो जब यह चयन किया गया है सहित) इस तत्व की नज़र बना सकते हैं, लेकिन मैं व्यवहार जब हो रही के साथ संघर्ष कर रहा हूँ यह UITextField का हिस्सा है। UITextField टेक्स्ट के हिस्से के रूप में कार्य करने के लिए आप बबल कैसे प्राप्त करते हैं? उदाहरण के लिए, जब आप बैकस्पेस बटन को पर्याप्त दबाते हैं, तो बबल हाइलाइट हो जाता है और एक और प्रेस के बाद हटा दिया जाएगा जैसे कि यह टेक्स्ट का हिस्सा था। मुझे भी कर्सर को ले जाने में कठिनाइयों का सामना करना पड़ा है।

अधिमानतः उत्तर मोनोटच में बहुत अच्छा होगा लेकिन उद्देश्य-सी उत्तर भी सराहना से अधिक हैं। मैं सटीक कोड नहीं मांग रहा हूं (हालांकि यदि आप इसके साथ भाग लेने के इच्छुक हैं, तो मैं नहीं कहूंगा!: डी) बल्कि इसे कैसे प्राप्त किया जाए।

मुझे थ्री 20 प्रोजेक्ट के बारे में पता है जिसमें एक समान तत्व है लेकिन मुझे यह नहीं पता कि कोड में वास्तव में क्या किया गया है। मुझे खेद है कि अगर यह ज्यादा समझ में नहीं आता है, तो मैंने इस प्रश्न को गहराई से रखने के लिए संघर्ष किया है, कृपया मुझे प्रश्न पूछने के लिए कोई प्रश्न पूछने में संकोच न करें!

+0

इस पुराने प्रश्न को जीवन में लाने के लिए खेद है। लेकिन क्या आप कोड को दिखा सकते हैं कि आपने इसे कैसे कार्यान्वित किया। क्या आपके पास नीली गोली के लिए छवि फाइलें भी हैं? –

उत्तर

18

मुझे पसंद नहीं है कि तीन20 में चीजों को कस्टमाइज़ करने, विश्लेषक चेतावनियों को ठीक करने और इसे एक्सकोड 4 में बनाने के लिए बुरे अनुभव होने का बुरा अनुभव नहीं है। इसे कभी भी एक नई परियोजना में उपयोग नहीं किया जाएगा। लेकिन शायद यह इस मामले में आप जो चाहते हैं वह करेंगे।

हालांकि आप अपने स्वयं के बुलबुले को काफी आसानी से बना सकते हैं। काश मैं ब्लॉग के लेखक को श्रेय दे सकता हूं कि मुझे यह मिला, लेकिन यह दो साल पहले था और अब मैं इसे Google के साथ नहीं ढूंढ सकता। असल में आप एक रंग चुन रहे हैं, राउंड एंडकैप्स ड्राइंग कर रहे हैं, उनके बीच एक आयत डालें और फिर शीर्ष पर आवश्यक टेक्स्ट डालें।

UIGraphicsBeginImageContext(CGSizeMake(SIDELENGTH, SIDELENGTH)); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

// the image should have a white background 
[[UIColor clearColor] set]; 
CGRect myRect = CGRectMake(0.0f, 0.0f, SIDELENGTH, SIDELENGTH); 
UIRectFill(myRect); 

[self.color set]; 

// Drawing code 
CGSize textSize = [self.text sizeWithFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]]]; 

double capDiameter = textSize.height; 
double capRadius = capDiameter/2.0; 
double capPadding = capDiameter/4.0; 
double textWidth = MAX(capDiameter, textSize.width) ; 

CGRect textBounds = CGRectMake(capPadding, 0.0, textWidth, textSize.height); 

CGRect badgeBounds = CGRectMake(0.0, 0.0, textWidth + (2.0 * capPadding), textSize.height); 

double offsetX = (CGRectGetMaxX(myRect) - CGRectGetMaxX(badgeBounds))/2.0; 
double offsetY = (CGRectGetMaxY(myRect) - CGRectGetMaxY(badgeBounds))/2.0; 
badgeBounds = CGRectOffset(badgeBounds, offsetX, offsetY); 
textBounds = CGRectOffset(textBounds, offsetX, offsetY); 

CGContextFillEllipseInRect(context, 
          CGRectMake(badgeBounds.origin.x, badgeBounds.origin.y, capDiameter, capDiameter)); 

CGContextFillEllipseInRect(context, 
          CGRectMake(badgeBounds.origin.x + badgeBounds.size.width - capDiameter, badgeBounds.origin.y, 
             capDiameter, capDiameter)); 

CGContextFillRect(context, CGRectMake(badgeBounds.origin.x + capRadius, badgeBounds.origin.y, 
             badgeBounds.size.width - capDiameter, capDiameter)); 

if(self.textColor != nil) { 
    const CGFloat* colors = CGColorGetComponents(self.textColor.CGColor); 
    CGColorSpaceRef space = CGColorGetColorSpace(self.textColor.CGColor); 
    CGColorSpaceModel model = CGColorSpaceGetModel(space); 

    if(model == kCGColorSpaceModelMonochrome) 
     // monochrome color space has one grayscale value and one alpha 
     CGContextSetRGBFillColor(context, *(colors + 0), *(colors + 0), *(colors + 0), *(colors + 1)); 
    else 
     // else a R,G,B,A scheme is assumed. 
     CGContextSetRGBFillColor(context, *(colors + 0), *(colors + 1), *(colors + 2), *(colors + 3)); 
} else 
    // else use plain white 
    CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f); 

[self.text drawInRect:textBounds 
withFont:[UIFont boldSystemFontOfSize:[UIFont systemFontSize]] 
lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter]; 

UIImage* image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

return image; 

हटाएँ बटन व्यवहार आपके द्वारा बताई भी बहुत सरल है - एक बार आप एक मैच चुना गया है और स्वीकार किए जाते हैं सम्मिलन बिंदु पर बुलबुला आकर्षित और UITextField के फ्रेम बदल बुलबुला के बाद शुरू किया है।यदि आप UITextField फ्रेम की शुरुआत में हैं और आपको एक और डिलीट मिलता है, तो बबल UIImageView को हटाएं, UITextField फ्रेम को रीसेट करें जहां UIImageView शुरू होता था।

या आप UIWebView को एड्रेस एंट्री फ़ील्ड के रूप में उपयोग कर सकते हैं जिसमें आप पाठ के साथ दिखाए गए कोड के साथ बनाई गई बबल छवियां प्रदर्शित करते हैं (this StackOverflow question देखें) जैसा कि आप इसे संपादित करते हैं। आपको निर्दिष्ट विधि को हटाने में संभालने के लिए प्रतिनिधि विधि के लिए एक हैंडलर लिखना होगा, और जोड़ा गया पता, और बबल छवि, यदि कोई बबल आइटम है जिसे डिलीट एक्शन लक्ष्यीकरण कर रहा है।

+5

+1 नफरत के लिए तीन20 ^^ –

+0

क्या आप समझा सकते हैं कि आप कैसे इसे लागू करेंगे? –

+0

कोड का नतीजा एक यूआईएममेज है, और इसके साथ करने का सबसे आसान काम इसे UIImageView में रखना है और फिर इसे अपने दृश्य पदानुक्रम में रखना है क्योंकि आप किसी भी UIView को देखना चाहते हैं। –

4

ऐसा लगता है कि यह जादुई नहीं है? Three20 कोड यहाँ है:

TTMessageController.h TTMessageController.m

TTMessageControllerDelegate.h

TTMessageField.h TTMessageField.m

TTMessageRecipientField.h TTMessageRecipientField.m

TTMessageSubjectField.h TTMessageSubjectField.m

TTMessageTextField.h TTMessageTextField.m

बेशक, आप बस एप्पल से Message UI framework अब का उपयोग करना चाहिए कि वे इसे जारी किया।

+0

धन्यवाद - मैंने पहले इन लिंक के माध्यम से scourered किया है और वास्तव में मेरे द्वारा वर्णित व्यवहार निष्पादित करने वाले वास्तविक कोड को खोजने में बहुत भाग्य नहीं है। साथ ही, जब मैं ऐप भेज रहा हूं तो मैसेज यूआई फ्रेमवर्क का उपयोग करता हूं - हालांकि ऐप को अपने स्वयं के प्रोप्रिटरी मैसेजिंग सिस्टम के माध्यम से एक संदेश भेजने की क्षमता भी चाहिए - जो मुझे यकीन है कि 'मैसेजिंग यूआई फ्रेमवर्क' का समर्थन नहीं है । मुझे सही जवाब दो अगर मैं गलत हूँ? – Luke

+0

साथ ही, ऐसा लगता है कि मैं चाहता हूं कि फ़ाइल है: https://github.com/facebook/three20/blob/development/src/Three20UI/Sources/TTPickerTextField.m – Luke

संबंधित मुद्दे