मैं नियंत्रण कैसे छिपा सकता हूं और दूसरों को आईओएस में स्थानांतरित करने का कारण बनता हूं?

मैं एक्सकोड 5 में आईओएस 7 के लिए एक ऐप प्रोग्रामिंग कर रहा हूं।

  1. मेरे पृष्ठ के शीर्ष पर मेरे पास तीन टेक्स्ट बॉक्स हैं, प्रत्येक के ऊपर प्रत्येक दाएं। आइए उन्हें शीर्ष टेक्स्टबॉक्स, मध्य टेक्स्टबॉक्स, और नीचे टेक्स्टबॉक्स पर कॉल करें।

  2. मेरा इरादा यह है कि किसी विशेष स्थिति के आधार पर, दृश्य लोड होने पर topTextBox दृश्यमान (या वर्तमान, वास्तव में) दिखाई नहीं दे सकता है।

  3. यदि टॉपटेक्स्टबॉक्स मौजूद नहीं है (या छिपी हुई है, या जो भी हो) मैं मिडलटेक्स्टबॉक्स और नीचे टेक्स्टबॉक्स को पेज को और आगे रखना चाहूंगा ... जैसे कि टॉपटेक्स्टबॉक्स पहले स्थान पर कभी नहीं था (इसलिए middleTextBox स्पॉट टॉप में है टेक्स्टबॉक्स का उपयोग किया जाता था, और नीचे टेक्स्टबॉक्स बॉक्स में होता है टेक्स्ट टेक्स्टबॉक्स में था)।

मैं ऑटोलाउट ऑन के साथ स्टोरीबोर्ड का उपयोग कर रहा हूं। मुझे लगता है कि यह काम करने के लिए तीनों टेक्स्टबॉक्सों में से प्रत्येक के लिए बाधाओं के साथ क्या करना है, यह समझ में नहीं आ रहा है। MiddleTextBox और bottomTextBox को पेज पर उच्चतम पर क्लिक करें जब टॉपटेक्स्टबॉक्स छुपा हुआ है, उसे गतिशील होने की आवश्यकता नहीं है - मैं ViewDidLoad() में शीर्ष टेक्स्टबॉक्स दिखाने या दिखाने का निर्णय लेता हूं - मुझे बस उन्हें दाईं ओर दिखाने की आवश्यकता है मेरी स्थितियों के आधार पर जगह।

प्रशन:

ए। TopTextBox.hidden = YES को टॉपटेक्स्टबॉक्स को दिखाने के लिए सही तरीका नहीं दिखाया जा रहा है? या क्या इस दृष्टिकोण से इसे ध्यान में रखने का कोई तरीका नहीं है?

ख। इस स्थिति में पृष्ठ पर उन्हें स्थानांतरित करने के लिए मैं मध्यस्थ टेक्स्टबॉक्स और नीचे टेक्स्टबॉक्स पर इन बाधाओं के साथ क्या करूँ?

सी। क्या ऐसा कुछ और है जो मुझे यह जानने के लिए जानना चाहिए कि मैं सोच नहीं रहा हूं? शायद एक बेहतर तरीका है?

धन्यवाद।

0

3 उत्तर

क्या आपने फ्रेम तर्क को कड़ी मेहनत करने की कोशिश की है? यह बहुत प्रभावी हो सकता है। आपको बस इतना करना है कि आपके टेक्स्ट फ़ील्ड में पॉइंटर्स वाले एक सरणी को सशर्त रूप से पॉप्युलेट करें और फिर अपने वाई मूल पर थोड़ा फ्रेम अंकगणित करें। उदाहरण के लिए, यह आसानी से सभी फ़ील्ड प्रदर्शित कर सकता है:

NSArray *fields = @[topTextField, middleTextField, bottomTextField];


for (int i = 0 ; i < fields.count ; i ++) {

    UITextField *field = fields[i];
    [field setFrame:CGRectMake(20.0, 20.0 + (i * 50.0), 280.0, 34.0)];

}

यह उत्पादन करता है:

यहां छवि विवरण दर्ज करें

या इसके सबसे बुनियादी स्तर पर, इस तरह की कुछ चीज़ों का उपयोग यह जांचने के लिए किया जा सकता है कि किसी भी पाठ फ़ील्ड को दिखाया जाना चाहिए/नहीं होना चाहिए, या तो उन्हें छुपाएं, या तदनुसार उनके फ्रेम को समायोजित करें।

BOOL shouldShowTop = YES;
BOOL shouldShowMiddle = NO;
BOOL shouldShowBottom = YES;


NSMutableArray *fields = [NSMutableArray new];

if (shouldShowTop) {
    [fields addObject:topTextField];
}else{
    [topTextField setHidden:YES];
}

if (shouldShowMiddle) {
    [fields addObject:middleTextField];
}else{
    [middleTextField setHidden:YES];
}

if (shouldShowBottom) {
    [fields addObject:bottomTextField];
}else{
    [bottomTextField setHidden:YES];
}

for (int i = 0 ; i < fields.count ; i ++) {

    UITextField *field = fields[i];
    [field setFrame:CGRectMake(20.0, 20.0 + (i * 50.0), 280.0, 34.0)];

}

इसका उत्पादन होगा:

यहां छवि विवरण दर्ज करें

0
जोड़ा
मैं इसे अधिक विस्तार से देखूंगा और देख सकता हूं कि यह मेरे ऐप के लिए कितना व्यवहार्य है। यदि यह वास्तव में बहुत अधिक कोडिंग है, तो मैं केवल दो पूरी तरह से अलग विचारों को बनाने के लिए प्रेरित हूं (मुझे आवश्यक फ़ील्ड के साथ/बिना) और स्थिति के आधार पर उन्हें अंदर/बाहर स्वैप करें। लेकिन विचार के लिए भोजन के लिए धन्यवाद!
जोड़ा लेखक Kent, स्रोत
@Kent कोड लिखने में खोदने से डरो मत। इंटरफ़ेस बिल्डर के साथ आप कहीं भी सीमित नहीं हैं।
जोड़ा लेखक Mick MacCallum, स्रोत

topTextField की ऊंचाई निर्धारित करना ताकि शून्य ऊंचाई हो, आपके लिए भी काम कर सके।

   CGRect  frame = topTextField.frame;
   frame.size.height =0;
   topTextField.frame = frame;

यह एक अच्छा विकल्प है कि आप बाद में अपनी उपस्थिति को एनिमेट करना चाहते हैं।

बाधाओं के लिए, ऊपर दिए गए टेक्स्टफील्ड के नीचे topTextField के शीर्ष पर middleTextField और bottomTextField के शीर्ष को बाध्य करें ।

Do not set a constraint for the height of topTextField, but do set width constraints. You'll need to set the height of topTextField in viewDidLoad:

0
जोड़ा
यह सरल और आशाजनक दिखता है, लेकिन .frame.height और .frame.size.height दोनों बिल्ड त्रुटियां प्रदान करते हैं (असाइन करने योग्य नहीं)। मैंने यह भी कोशिश की है CGRect frameRect = self.eventName.frame; frameRect.size.height = 0; self.eventName.frame = frameRect; और फिर इसे जोड़ना: self.eventName.hidden = हाँ; और इनमें से कोई भी विकल्प वास्तव में टेक्स्ट बॉक्स गायब नहीं होता है (छिपे हुए कोड के अलावा) लेकिन किसी भी मामले में बाधाओं के मुताबिक पेज पर सबकुछ ऊपर नहीं जाता है (मैंने उन्हें निर्देशित के रूप में बहुत ही सरल बना दिया है)। यकीन नहीं है कि यह अभी भी क्यों काम नह
जोड़ा लेखक Kent, स्रोत
मेरे बुरा: CGRect संरचना के व्यक्तिगत सदस्यों अपरिवर्तनीय हैं। उत्तर तदनुसार संपादित। के रूप में काम नहीं कर रहा: क्या अन्य बाधाओं मौजूद हैं? के साथ इस की जांच की कोशिश करो [UIView onstraintsAffectingLayoutForAxis:] ( देख )।
जोड़ा लेखक marko, स्रोत

TopTextField की ऊंचाई की बाधा को 0 पर सेट करने से आपको यह प्राप्त करने में मदद मिलेगी। बशर्ते सभी टेक्स्टफील्ड लंबवत अंतरिक्ष बाधा के माध्यम से जुड़े हुए हों

0
जोड़ा