2010-03-31 23 views
5

में काम नहीं कर रहा है, मैं एक प्लिस्ट से कुछ सहायता टेक्स्ट लोड कर रहा हूं और इसे UIScrollView में रखे UILabels के रूप में प्रदर्शित कर रहा हूं। कोड के भाग इस प्रकार है:लाइन ब्रेक UILabel

UILabel *sectionDetailLabel = [[[UILabel alloc] initWithFrame:CGRectMake(34, myOriginForThisSection, 286, 20)] autorelease]; 
    sectionDetailLabel.backgroundColor = [UIColor clearColor]; 
    sectionDetailLabel.numberOfLines = 0; 
    sectionDetailLabel.font = [UIFont systemFontOfSize:12]; 
    sectionDetailLabel.textColor = [UIColor blackColor]; 
    sectionDetailLabel.textAlignment = UITextAlignmentLeft; 
    sectionDetailLabel.lineBreakMode = UILineBreakModeWordWrap; 

    [baseScrollView addSubview:sectionDetailLabel]; 

    [sectionDetailLabel setText:myStringForThisSection]; 
    [sectionDetailLabel sizeToFit]; 

किसी भी 'लंबी' पाठ सही ढंग से कई पंक्तियों में लपेटा जा रहा है, वहीं मैं मैन्युअल रूप से न्यू लाइन का उपयोग कर किसी भी लाइन-विराम सम्मिलित करने में असमर्थ 'myStringForThisSection में पात्रों हूँ' \ n ' '। मैं केवल यूआईएलएबल में मुद्रित वर्णों '\' और 'n' को देखता हूं, जहां भी मैं लाइन-ब्रेक चाहता था।

मैंने इसे देखा और सामान्य सर्वसम्मति यह थी कि सेटिंग संख्याऑफलाइन 0 पर, लाइन ब्रेकमोड को वैध मान पर सेट करने और आकार का आविष्कार करने के लिए (या आकार के आधार पर UILabel के फ्रेम को सेट करना :) करना चाहिए। जो मैं उपर्युक्त कोड में कर रहा हूं - और UILabel पर कई पंक्तियों में अज्ञात लंबाई के लंबे तारों को फ़िट करते समय पूरी तरह से काम करता है। तो यहाँ क्या याद आ रही है?

नोट: सभी चर का उपयोग किया जाता है - बेसस्क्रॉल व्यू, myStringForThisSection और myOriginForThisSection - उपरोक्त कोड निष्पादित करने से पहले लोड किया गया था, और ठीक काम करता था।

+0

हैं, तो यह नहीं होगा। यदि यह कोड में घोषित/बनाया गया है (शायद यहां तक ​​कि संभवतः एक प्लिस्ट में), तो नई लाइन को इस तरह एन्कोड किया जाएगा। अंतरिक्ष के बाद एक नई लाइन का पालन किया जाना चाहिए, यदि वह रेखा एक खाली रेखा है, हालांकि। –

उत्तर

8

उइलाबेल भागने अनुक्रम \ n की व्याख्या नहीं करता है। आप असली चरित्र डाल सकते हैं जो कैरिज रिटर्न और/या लाइन फीड का प्रतिनिधित्व करता है। अपनी नई लाइन पकड़ने के लिए एक char बनाओ और फिर इसे सम्मिलित करें।

unichar newLine = '\n'; 
NSString *singleCR = [NSString stringWithCharacters:&newLine length:1]; 
[myStringForThisSection insertString:singleCR atIndex:somePlaceIWantACR]; 

जब तक आपका myStringForThisSection mutable है, तो इसे करना चाहिए।

+0

यह काम किया! बहुत बहुत धन्यवाद। –

+0

बच निकले कैरिज रिटर्न, यानी '\ r', यह भी काम करता है। कम से कम स्विफ्ट 3 में, आईओएस 10+ – Chris

3

मैं ऊपर XCode 4.3 में

स्कॉट Gustafson के जवाब में समस्या आई बजाय इस प्रयास करें:

unichar chr[1] = {'\n'}; 
NSString *cR = [NSString stringWithCharacters:(const unichar *)chr length:1]; 

तो इस तरह अपने कोड में कुछ का उपयोग करें:

self.myLabel.text = [NSString stringWithFormat:@"First Label Line%@Second Label Line", cR]; 
+0

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

+0

देव या तो काम करता है, जिस तरह से मैं इसे करता हूं, बस मेरे जैसे साधारण दिमागों को और अधिक समझ में आता है! मुझे सिंगलसीआर की आपकी परिभाषा में परेशानी हुई - मुझे आईओएस 5 एक्सकोड 4.3.1 – DoctorG

+0

में एक त्रुटि मिली है। मेरे पास समय होने के बाद दोनों समाधानों की जांच होगी, और वापस पोस्ट करें। –

1

मैं नहीं कर सका स्कॉट & काम करने के लिए डॉक्टरजी का समाधान (हालांकि मैंने कोशिश करने में बहुत अधिक समय नहीं लगाया), लेकिन यहां एक आसान समाधान है जो मेरे लिए काम करता है जब मैं बच निकला पाठ निकाल रहा हूं एक एक्सएमएल फ़ाइल से।

मेरी स्ट्रिंग समारोह वर्ग के अंदर, मैं परिभाषित: स्ट्रिंग किसी बाहरी स्रोत से आता है

+(NSString)escapeXml:(NSString*)string { 
    return [string stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"]; 
} 
संबंधित मुद्दे