क्या मैं उद्देश्य सी में स्विच स्टेटमेंट के भीतर मामलों पर निर्माण कर सकता हूं?

मैं सामान्य रूप से प्रोग्रामिंग के लिए कुछ नया हूँ। उद्देश्य-सी के साथ और भी ज्यादा। मैं पिछले स्क्रीन पर दर्ज मान के आधार पर लेबल और टेक्स्ट बॉक्स प्रदर्शित करने की कोशिश कर रहा हूं। यहां वर्तमान में मेरे पास है:

switch (previousValue) {
   case 1:
      [label1 setHidden:FALSE];
      [textField1 setHidden:FALSE];
      break;

   case 2:
      [label1 setHidden:FALSE];
      [textField1 setHidden:FALSE];
      [label2 setHidden:FALSE];
      [textField2 setHidden:FALSE];
      break;

   case n:
      [label1 setHidden:FALSE];
      [textField1 setHidden:FALSE];
      [label2 setHidden:FALSE];
      [textField2 setHidden:FALSE];
      [labelN setHidden:FALSE];
      [textFieldN setHidden:FALSE];
      break;
}

क्या इसे करने का कोई आसान रास्ता है? मेरे पास 60 संभावित मामले हैं। मैं एक समान फैशन में एक स्विच स्टेटमेंट का भी उपयोग कर रहा हूं, लेकिन यह गणनाओं से संबंधित है जो एक दूसरे पर निर्माण करते हैं। किसी भी सहायता की काफी सराहना की जाएगी।

0
आपको अपने लेबल और टेक्स्ट फ़ील्ड को सरणी में रखना चाहिए और बस उन पर फिर से चालू होना चाहिए।
जोड़ा लेखक Anthony Raimondo, स्रोत

2 उत्तर

it looks like you have N<=60 labels/textfileds and you set for each one hidden:False according to a value. Using a switch statement like that increases your code size and it's not very readable. A better way is to use a bitFiled: each bit in the bitfield corresponds to one label/textfield - bit3 is used for label3/textField3.

आइए मान लीजिए कि आपके पास केवल 8 लेबल/टेक्स्टफील्ड हैं - आपको बस अधिक बिट्स के लिए एक बड़ा डेटा प्रकार चुनना होगा - और देखें कि आप इसे कैसे कोड करेंगे:

char Bitfield;

int mask =0x01;
for( i=0;i<8;i++)
{
    if (bitfield&mask)
    {
     setHidden(i);//sets the attributes for label/textfield i
    }
   mask>>=1;
}

इस तथ्य के अलावा कि कोड अधिक पठनीय हो जाता है, अब आपके पास प्रत्येक लेबल/टेक्स्टफील्ड पर व्यक्तिगत रूप से नियंत्रण होता है - यदि आप चाहें तो आप केवल लेबल/टेक्स्टफील्ड 1 और 5 के लिए विशेषताओं को सेट कर सकते हैं।

0
जोड़ा

यदि वे आईबीओटलेट हैं तो आप आईबीओलेटलेट कोलेक्शन सेट कर सकते हैं जो आउटलेट्स की एक सरणी बनायेगा जिन्हें आप व्यवस्थित करना चाहते हैं। फिर आप बस कॉल कर सकते हैं:

[_outlets setValue:@NO forKeyPath:@"hidden"];
0
जोड़ा