UIView

2010-07-09 23 views
25

पर प्रोग्रामेटिक रूप से टेक्स्ट जोड़ने के लिए मेरे पास UIView है जो मैं टेक्स्ट के कई बिट जोड़ना चाहता हूं। मैंने UITextView का उपयोग किया है, लेकिन मुझे लगता है कि यह अधिक है क्योंकि इसे संपादन योग्य होने की आवश्यकता नहीं है। मैंने UILabel या UITextField का उपयोग करने के बारे में सोचा, लेकिन मुझे नहीं लगता कि आप पर्यवेक्षण को कैसे कहते हैं कि UILabel या UITextField को अपने आप में कहां रखा जाए। मैं सबसे कम पदचिह्न वस्तु चाहता हूं जो मुझे अपने UIView में मेरे चयन के फ़ॉन्ट/रंग/आकार का टेक्स्ट डालने देगी जहां मैं इसे चाहता हूं। पूछने के लिए बहुत कुछ नहीं, आह?UIView

उत्तर

60

आप के लिए सबसे सरल दृष्टिकोण होगा:

UILabel *yourLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 20)]; 

[yourLabel setTextColor:[UIColor blackColor]]; 
[yourLabel setBackgroundColor:[UIColor clearColor]]; 
[yourLabel setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]]; 
[yourSuperView addSubview:yourLabel]; 

भवन या पॉप्युलेट अपने कोड में दृश्य शायद CGRectMake एक बहुत उपयोग करने के लिए की आवश्यकता होगी। जैसा कि इसका नाम कहता है, यह एक आयताकार बनाता है जिसका उपयोग आप सापेक्ष स्थिति (अपने पर्यवेक्षण की सीमाओं के सापेक्ष) और UIView-Subclass (इस मामले में UILabel) के आकार को सेट करने के लिए कर सकते हैं।

यह इस तरह काम करता है:

yourLabel.Frame = CGRectMake(x, y, width, height); //x,y,width,height are float values. 

x superview के बाएं हाथ की सीमा और subview अपने बारे में जोड़ने के लिए की शुरुआत के बीच का अंतर को परिभाषित करता है, एक ही y पर लागू होता है, लेकिन शीर्ष के बीच का अंतर से संबंधित - आपके पर्यवेक्षण का सीमा। तब चौड़ाई और ऊंचाई स्वयं-व्याख्यात्मक हैं जो मुझे लगता है।

आशा है कि यह आपको ट्रैक पर ले जाएगा।

+1

मैं दस्तावेज में दोनों UILabel और UITextField देखा और देखते हैं कि वे से विरासत ... UITextField: UIControl: UIView: UIResponder: NSObject UILabel: UIView: UIResponder: NSObject तो मुझे लगता है कि अनुमान लगा रहा हूँ, क्योंकि वे दोनों UIView से विरासत में हैं, कि उनके पास UIView की सभी संपत्तियां हैं? ... साथ ही अतिरिक्त वे रास्ते में उठाते हैं? यह समझ में आता है, लेकिन UILabel के लिए दस्तावेज में, एप्पल की तुलना में अन्य किसी भी तरीकों की सूची नहीं है - (शून्य) drawTextInRect: (CGRect) रेक्ट और - (CGRect) textRectForBounds: (CGRect) सीमा – Steve

+0

(टिप्पणी बॉक्स मेरे जैसे शब्दकोष लोगों के लिए बहुत छोटे हैं ...) क्या मैं यह मानने के लिए सुरक्षित हूं कि मेरे पास किसी भी कक्षा के लिए एनएसओब्जेक्ट के लिए श्रृंखला के हर सुपरक्लास के सभी गुणों तक पहुंच है? सहायता के लिए धन्यवाद, इसकी सराहना की गई है! – Steve

+0

हाँ आप सही हैं, यह वही है कि विरासत कैसे काम करती है। मुझे अभी भी वह नहीं मिलता है जिसे आप drawTextInRect इत्यादि के साथ प्राप्त करना चाहते हैं। एक UILabel (या उस मामले के लिए UITextview) वे दृश्य हैं जो आपको कार्यक्षमता प्रदान करते हैं जो आपको टेक्स्ट को एक बहुत ही आसान तरीके से सेट करने की अनुमति देता है। शायद मैं यहाँ समस्या को नहीं देखता :)। – samsam

0

अपने दृश्य में एक UILabel जोड़ें। फिर व्यू के लेआउट सबव्यूव्स विधि को ओवरराइड करें।

8

यूआईएलएबल की स्थिति कहां देखने के लिए एक तरीका खोजने के बजाय, आप UILabel को बता सकते हैं कि "केंद्र" का उपयोग करके दृश्य में खुद को कैसे स्थानांतरित किया जाए।

उदा।

myLabel.center = CGPointMake(0.0, 0.0); 

आशा है कि आप UILabel का उपयोग करने में सक्षम होंगे, मेरे लिए यह एक लचीला गैर संपादन योग्य पाठ का मूल रूप है।

+0

धन्यवाद - इसे रखने का एक अच्छा, संक्षिप्त तरीका। क्या मैं यह सोचने में सही हूं कि यूआईएलएबल जैसी चीजें एक पूर्ण UIView की तुलना में कम ओवरहेड लेती हैं? अब जब मैं (मुझे लगता है) एहसास है कि यह UIView से विरासत में है, यह एक दोषपूर्ण धारणा है? – Steve

+1

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

2

यह प्रश्न पुराना है, लेकिन UILabel या UITextField का उपयोग किए बिना शुद्ध UIView टेक्स्ट विकल्प के लिए (जैसा कि अन्य सभी उत्तरों वर्णन करते हैं, लेकिन प्रश्न यह है कि उनके बिना इसे कैसे किया जाए), मेरे लिए एक उपclassed UIView कार्यों में drawRect। इसलिए जैसा:

- (void)drawRect:(CGRect)rect{ 
    NSString *string = @"Hello World!"; 
    [string drawAtPoint:CGPointMake(100, 100) withFont:[UIFont boldSystemFontOfSize:16.0]]; 
} 
+1

मैं इसे वापस लेता हूं - वास्तव में यह आईओएस 7 से निराश है, ऐप्पल का कहना है, "एनएसएसटींग कक्षा में कई ड्राइंग जोड़ों को नए रूपों के पक्ष में बहिष्कृत किया गया है।" जिसका अर्थ है DrawAtPoint: UFiew में nsstring को आकर्षित करने का सबसे अच्छा तरीका नहीं है। – entire

+0

आप का उपयोग कर सकते हैं - (शून्य) drawAtPoint: (CGPoint) बिंदु के साथ बिंदु: (NSDictionary *) attrs NS_AVAILABLE_IOS (7_0); iOs7 के लिए और बाद में – goelectric

1

इस दिनचर्या को प्रदर्शित करता है एक XY स्थिति

-(void)placeText:(NSString *)theText:(int)theX:(int)theY { 
    UILabel *textLabel; 

    // Set font and calculate used space 
    UIFont *textFont = [UIFont fontWithName:@"Helvetica" size:14]; 
    CGSize textStringSize = [theText sizeWithFont:textFont constrainedToSize:CGSizeMake(300,50) lineBreakMode:NSLineBreakByTruncatingTail]; 

    // Position of the text 
    textLabel = [[UILabel alloc] initWithFrame:CGRectMake(theX+OFFSETIMAGEX-(textStringSize.width/2), theY+OFFSETIMAGEY-(textStringSize.height/2), textStringSize.width,textStringSize.height)]; 

    // Set text attributes 
    textLabel.textColor = [UIColor blackColor]; 
    textLabel.backgroundColor = [UIColor orangeColor]; 
    textLabel.font = textFont; 
    textLabel.text = theText; 

    // Display text 
    [self.view addSubview:textLabel]; 
} 
2

पर एक पाठ स्विफ्ट के लिए:

let yourLabel = UILabel(frame: CGRectMake(100, 100, 100, 100)) 
    yourLabel.textColor = UIColor.whiteColor() 
    yourLabel.backgroundColor = UIColor.blackColor() 
    yourLabel.text = "mylabel text" 
    yoursuperview.addSubview(yourLabel) 
+0

स्विफ्ट 3 के लिए केवल UILabel को UILabel सिंटैक्स बदलें (फ्रेम: CGRect (x: 100, y: 100, चौड़ाई: 100, ऊंचाई: 100)) –

1

यह देर हो, लेकिन यहाँ हो सकता है मैं क्या उपयोग है: -

CGRect labelFrame = CGRectMake(120,300, 530, 100); 
UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame]; 
//If you need to change the color 
[myLabel setTextColor:[UIColor whiteColor]]; 
//If you need to change the system font 
[myLabel setFont:[UIFont fontWithName:NULL size:23]]; 
//If you need alignment 
[myLabel setTextAlignment:NSTextAlignmentCenter]; 
// The label will use an unlimited number of lines 
[myLabel setNumberOfLines:0]; 
//Add label view to current view 
[self.view addSubview:myLabel]; 
NSString *someString = @"Sample String, Yarp!"; 
myLabel.text = someString;