مکمل بصیرت حاصل کرنے کے لئے ، براہ کرم پڑھیں . یہ iOS ایپ سیریز کا دوسرا بلاگ ہے۔
اگر آپ ایک تجربہ کار ڈویلپر ہیں جو ملٹی کمپونٹینٹ چنندہ کے کام کرنے میں دلچسپی رکھتے ہیں تو آپ صحیح بلاگ پر آ گئے ہیں۔ اس بلاگ میں ، میں اس بارے میں بات کروں گا کہ ملٹی اجزاء چننے والے کو لاگو کرکے اپنے تبادلوں کی ایپ کو زیادہ فعالیت کے ساتھ بڑھایا جائے ، اور انتباہات کا استعمال کرتے ہوئے غیر معمولی ہینڈلنگ انجام دینے کا طریقہ بھی۔
میںآخری بلاگ ،ہم نے دیکھا ہے جب ہم ٹیکسٹ فیلڈ پر کوئی ٹائپ کرتے ہیں تو کی بورڈ پاپ اپ ہوجاتا ہے۔ تبدیل کی جانے والی قدر ٹیکسٹ فیلڈ میں ٹائپ کی جاتی ہے اور پھر ہم دیکھتے ہیں کہ کی بورڈ ختم نہیں ہوتا ہے۔
اس مسئلے کو حل کرنے کے ل we ہمیں ایک بٹن شامل کرنا ہوگا جس میں پورے نظارے کا احاطہ کیا گیا ہو۔ جب صارف پس منظر میں کہیں بھی چھوتا ہے تو ، کی بورڈ غائب ہوجانا چاہئے۔
اب ، آگے چلیں اور کرتے ہیں۔ بٹن کو گھسیٹیں ، بٹن کی قسم کو کسٹم کے مطابق اور ٹیکسٹ کلر کو بطور خاص انسپکٹر سے واضح رنگ کے طور پر سیٹ کریں۔
اور ایڈیٹر> بندوبست کریں> واپس بھیجیں منتخب کریں
اور بٹن کو اس انداز میں تبدیل کریں کہ یہ پورے نظارے کے مطابق ہو۔
اب یہ بٹن بیک گراؤنڈ کے پوشیدہ بٹن کے طور پر کام کرتا ہے جسے کی بورڈ غائب ہونے کے لئے کلک کیا جاتا ہے۔ آئی بی اے ایکشن لکھتے ہیں اس کے لئے ، اسسٹنٹ ایڈیٹر موڈ کو منتخب کریں اور دیکھیں + کنٹرولر۔ کنکشن کو ایکشن پر سیٹ کریں اور بیک گراؤنڈبٹن کو نام دیں اور کنیکٹ پر کلک کریں۔
ویو کنٹرولر کوڈ اب ایسا ہی لگتا ہے۔
#Importinterface ViewController: UIViewControllerProperty (strong، nonatomic) IBOutlet UITextField * ValueTextFieldproperty (strong، nonatomic) IBOutlet UIPickerView * picker2Pererty (مضبوط ، nonatomic) Ubablet * IAbletlet * - (IBAction) تبدیل کریں: (UIButton *) بھیجنے والا - (IBAction) پس منظر بٹن: (ID) بھیجنے والاend
ViewController.m پر سوئچ کریں اور پھر درج ذیل کوڈ لکھیں۔
- (آئی بی اےکشن) بیک گراؤنڈ بٹن: (آئی ڈی) بھیجنے والا {[_ ویلیو ٹیکسٹ فیلڈ نے استعفیٰ فرسٹ ریسپونڈر] [_ پیکر 2 استعفیٰ فرسٹ ریسپونڈر] [_مثال لیبل استعفیٰ فرسٹ ریسپونڈر]}
یہاں کوڈ دوسرے تمام اشیاء کو بتاتا ہے کہ جب کسی ٹچ کا پتہ چل جاتا ہے تو وہ پہلے جواب دہندگان کی حیثیت حاصل کرتا ہے۔ اب ، ایپ چلائیں اور دیکھیں۔ آپ پس منظر کو چھونے پر یہ معلوم کرسکیں گے کہ کی بورڈ چلا جاتا ہے۔ آپ کی ٹائپنگ مکمل ہونے پر کی بورڈ جانے کے ل، ، منتخب کنندہ کے didselectRow () طریقہ میں پس منظر کے بٹن کے طریقہ کار پر کال کریں۔ تو طریقہ کوڈ مندرجہ ذیل ہوگا۔
- (باطل) چننے والا منظر: (UIPickerView *) picerView didSelectRow: (NSInteger) قطار inComp घटक: (NSInteger) جزو {منتخب کردہ قیمت = _ڈیٹا [قطار] [خود پس منظر بٹن: 0]}
اب ، آپ ایپ کے خوبصورتی حصے پر کام کرسکتے ہیں ، جیسے ایک پس منظر شامل کرنا اور شاید یہاں تک کہ ایک فینسی بٹن امیج دینا۔ تاہم ، میرا ، میں ایک پس منظر کی تصویر ترتیب دوں گا۔
ایسا کرنے کے ل first ، ایک مناسب شبیہ اول تلاش کریں! پھر اسے فولڈر میں شامل کریں۔ امیجز.کسیسیسیٹ اور تصویر کو 1x سے 2x سکرین میں عالمگیر میں تبدیل کریں۔
ایپ چلائیں اور دیکھیں کہ آیا یہ ٹھیک کام کرتا ہے۔
اگر میں آلہ کو آئی فون 5s میں تبدیل کرتا ہوں۔
اور ایپ چلائیں۔
یہاں ہم دیکھ سکتے ہیں کہ ہر چیز توقع کے مطابق ٹھیک کام کرتی ہے۔ اب کیا ہوگا اگر میں اپنے بٹن میں پس منظر شامل کرنا اور بٹن کی طرح ظاہری شکل بنانا چاہتا ہوں؟ ایسا کرنے کے ل I ، میں پہلے کنورٹ بٹن کے لئے آئی ویوٹلیٹ کو ویوکونٹرولرحر میں شامل کروں گا
@ پراپرٹی (مضبوط ، غیر معاشی) IBOutlet UIButton * میں تبدیل کریں
اور پھر ویو ڈیڈلوڈ () کے طریقہ کار میں درج ذیل کوڈ شامل کریں
سیلف کوونٹ. بیک گراؤنڈ کلر = [UIColor رنگین ساتھ: 0.4 سبز: 0.8 نیلا: 1.0 الفا: 1.0] [_کونٹ سیٹ ٹائٹل کلر: [UIColor وائٹ کلور] اسٹیٹ: UIControlStateNormal]
آئیے ہم اپنا ایپ چلاتے ہیں اور دیکھتے ہیں کہ آیا یہ وہ طریقہ ہے جو ہمیں پسند ہے۔
جاوا طریقہ سے باہر ٹوٹ گیا
ٹھیک ہے بہت اچھے! آپ نے دیکھا ہوگا کہ میں نے رزلٹ لیبل کی پوزیشن بھی تبدیل کردی ہے ، اس تبدیلی کی وجہ کچھ ایسی ہے جس کے بارے میں میں بعد میں وضاحت کروں گا۔
ہم جانتے ہیں کہ ہماری ایپ سیلسیس سے صرف فارن ہائیٹ اور وائیس ورسٹ میں تبدیل ہوتی ہے۔ تو ، تبدیل کرنے کے لئے مزید کچھ افعال یا اکائیوں کے بارے میں کیسے؟ ایسا کرنے کے ل we ، ہمیں UIPickerView میں ایک اور جزو شامل کرنے کی ضرورت ہے جو مناسب انتخاب فراہم کرتی ہے ، جب کسی اکائی کو چننے والے کے پہلے جزو میں منتخب کیا جاتا ہے۔
کسی چنندہ کو دو اجزاء میں تقسیم کرنے کے ل we ، ہمیں ایک نیا NSArray ڈیٹا 2 شامل کرنے کی ضرورت ہے ، جو دوسرے اجزاء کے لئے ڈیٹا رکھے گی۔ نیز ، دو مستقل کی وضاحت کریں جو ہمارے دونوں اجزاء کی نمائندگی کریں گے۔ یہاں ، پروگرامنگ کی سادگی کے لئے بائیں جزو کو 0 اور دائیں جزو کو 1 قرار دیا گیا ہے۔
آپ کی ViewController.h فائل ایسی نظر آتی ہے
# امپورٹ # ڈیٹا 1comp 0 کی وضاحت کریں # @ انٹرفیس ویوکنٹرولر: UIViewControllerProperty (مضبوط ، nonatomic) IBOutlet UITextFeld * ValueTextFieldProperty (strong، nonatomic) IBOletlet UIPickerprop Nat1properAAPraterAaPro2Per2ArPraterA ،PerertyPropertySaPer2A @ strong، nonatomic) NSArray * data2property (strong، nonatomic) IBOutlet UILabel * ResultLabelproperty (strong، nonatomic) IBOutlet UIButton * कन्वर्ट - (IBAction) پس منظر بھیجنے والا بٹن: @ اینڈ
اب ViewDidLoad () طریقہ میں سرنی ڈیٹا 2 کی وضاحت کریں۔ اب چونکہ ہمارے پاس کوائف کے دونوں ذرائع ہیں ، ہمیں چننے والے کے لئے اس طرح کوڈ لکھنے کے قابل ہونا چاہئے کہ جب ہم چننے والے کے پہلے جزو سے کوئی شے منتخب کریں تو دوسرا جزو خود بخود اسی قدر میں بدل جائے۔ دوسرا جزو پہلے کے انتخاب پر منحصر ہے۔
اس کے ل we ، ہمیں ایک لغت کی وضاحت کرنے کی ضرورت ہے جو کلیدوں اور اقدار کو محفوظ کرے گی۔ چابیاں چننے والے کے پہلے جزو سے متعلق ڈیٹا پر مشتمل ہوتی ہیں ، اور اقدار میں چنندہ کے دوسرے جزو سے متعلق ڈیٹا ہوتا ہے۔
- (باطل) ویو ڈیڈلوڈ {[سپر ویوڈلڈ لوڈ] // منظر کو لوڈ کرنے کے بعد کوئی بھی اضافی سیٹ اپ کریں ، عام طور پر کسی نب سے۔ _data1 = [NSArray arrayWithObjects: @ 'سیلسیس' ، @ 'فارن ہائیٹ' ، @ 'میٹر' ، @ 'سنٹی میٹر' ، نیل] ڈیٹا 2 = [NSArray arrayWithObjects: @ 'سینٹی میٹر' ، @ 'میٹر' ، @ 'فارن ہائیٹ' ، @ 'سیلسیئس' ، نیل] ڈکشنری = [این ایس ڈی ڈکشنریویتھے آبجیکٹ اینڈ کیز: @ 'سیلسیئس' ، @ 'فریین ہیٹ' ، @ 'فارین ہائٹ' ، @ 'سیلسیئس' ، @ 'میٹر' ، @ 'سنٹی میٹر' ، @ 'سنٹی میٹر' ، @ 'میٹر '، nil] self.view.backgroundColor = [UIColor colorWithPatternImage: [UII image امیجام نام: (@' bg2.png ')]]}
اب ، ہمیں ڈیٹا کا ماخذ اور موجودہ چنندہ کے طریق کار کو مندرجہ ذیل میں تبدیل کرنا ہوگا ، تاکہ ہمارے پاس دونوں اجزاء میں ڈیٹا بھر جائے۔
- (NSInteger) numberOfComp घटकInPickerView: (UIPickerView *) چننے والا {واپسی 2} - (NSInteger) पिकر ویو: (UIPickerView *) pickerView نمبرOfRowsInCompender: (NSInteger) جزو {اگر retdat ========================================================================================== [self.data2 count]} - (NSString *) pickerView: (UIPickerView *) pickerView عنوان forRow: (NSInteger) قطار forComp घटक: (NSInteger) جزو {اگر (جزو == ڈیٹا 1 کامپ) {واپس [self.data1 اعتراضAtIndex: قطار]} واپسی [self.data2 آبجیکٹٹانٹیکس: قطار]} - (باطل) چننے والا منظر: (UIPickerView *) picerView didSelectRow: (NSInteger) قطار inComp घटक: (NSInteger) جزو {[خود پس منظر بٹن: 0] اگر (جزو == ڈیٹا 1 کمپیوٹر) ring Ntt ڈیٹا 11 = [_ ڈیٹا 1 آبجیکٹٹ انڈیکس: قطار] این ایس آری * اے = [لغت آبجیکٹ فورکی: ڈیٹا 11] سیکنڈرو = [سیلف ڈیٹا 2 انڈکسآف آبجیکٹ: ا] [_ پیکر 2 سلیکٹ رو: سیکنڈرو انکمپیمنٹ: ڈیٹا 2 کممپ متحرک: یس] [منتخب کردہ 2 دوبارہ لوڈ کا انتخاب کیا گیا: ڈیٹاولک 11] منتخب = قطار}}
یہاں ہمارے didSelectRow () کے طریقہ کار میں ، ہمیں پہلے جزو کی منتخب کردہ قیمت مل رہی ہے ، پھر ہم اسے لغت کے آبجیکٹ فورکی () کے طریقہ کار پر دلیل کے طور پر منتقل کرتے ہیں ، اور کلید کی متعلقہ قیمت حاصل کرتے ہیں۔ دوسری صف میں یعنی ڈیٹا 2 میں قیمت کے لئے متعلقہ پوزیشن تلاش کرنے کے ل we ، ہم سرنی کے انڈیکس آف آف آبجیکٹ () کا طریقہ استعمال کرتے ہیں اور نتیجہ کو انٹیجر ویلیو میں اسٹور کرتے ہیں۔
اس کے بعد ہم اس انٹیجر ویلیو کو چننے والے کے طریقہ کار کو منتخب کریں رو: قطار انکمپاؤنٹ: جزو () طریقہ پر منتقل کردیتے ہیں۔ اور دوبارہ لوڈکیمپونٹینٹ () کا استعمال کرکے چننے والے کے جزو کو دوبارہ لوڈ کریں۔
ایک بار جب ہم نے یہ کام کرلیا ، چونکہ ہم پہلے اجزاء میں سے ایک آئٹم منتخب کریں گے ، اسی چیز کو چننے والے کے دوسرے جزو میں منتخب کیا جائے گا۔
didSelectRow () کے لئے کوڈ
- (باطل) چننے والا منظر: (UIPickerView *) pickerView didSelectRow: (NSInteger) قطار inComp घटक: (NSInteger) جزو {[خود پس منظر بٹن: 0] اگر (جزو == ڈیٹا 1 کمپپٹ) {NSString * data11 = [_11 آبجیکٹ اینٹیکس صف]] a = [ڈکشنری آبجیکٹفورکی: ڈیٹا 11] سیکنڈرو = [سیلف ڈیٹا 2 انڈکسآف آبجیکٹ: ا] [_پیکر 2 سلیکٹ رو: سیکنڈرو انکمپیمنٹ: ڈیٹا 2 کمپمپیمنٹ: ڈیٹا 2 کمپمپینٹ: ڈیٹا 2 کمپوزیشن] منتخب شدہ ویلیو = ڈیٹا 11 منتخب روow = قطار}
اب ایپ چلائیں اور دیکھیں ، اگر منتخب کنندہ اس کی توقع کے مطابق کام کرتا ہے تو۔
Voila! یہ کام کرتا ہے!
تو آئیے ہم اپنا کنورٹ بٹن کوڈ کرتے رہتے ہیں۔ پہلے چننے والے کے پاس میچ کرنے کے لئے صرف دو قدریں تھیں یعنی سیلسیس اور فارن ہائیٹ اور پھر نتیجہ کا حساب لیا گیا۔ لیکن اب ہمارے پاس چار اقدار سیلسیس ، فارن ہائیٹ ، میٹر اور سینٹی میٹر ہیں۔ لہذا میں نے ایک سوئچ بیان استعمال کیا ہے ، جو منتخب قطار متغیر کی بنیاد پر قیمت کا حساب لگاتا ہے۔
- (آئی بی اےکشن) کنورٹ کریں: (UIButton *) بھیجنے والا {فلوٹ ویل = [_ ویلیو ٹیکسٹفیلڈ۔ ٹیکسٹ فلوٹ ویل] NSLog (@ 'ویلیو٪ f' ، ویل) سوئچ (منتخب رو) {کیس 0: // سیلسیس تا فارین ہائیٹ ریس = (ویل * 1.8) + 32 بریک کیس 1: // فارن ہائیٹ ٹو سیلسیس ریز = (ویل 32) / 1.8 بریک کیس 2: // میٹر ٹو سینٹی میٹر ریز = ویل * 100 بریک کیس 3: // سینٹی میٹر سے میٹر ریس = ویل * 0.01 وقفہ پہلے سے طے شدہ: res = 0.0} NSString * فائنل = [NSString سٹرنگ کے ساتھ Format: @ '٪. 02f'، res] _ResultLabel.text = حتمی}
اگر آپ ایپ چلاتے ہیں تو ہم دیکھ سکتے ہیں کہ سب کچھ ٹھیک چلتا ہے۔
اب ، ہم ان رعایتوں کی جانچ کر سکتے ہیں جو ہمارے ایپ میں پائے جا سکتے ہیں۔ مثال کے طور پر ، ٹیکسٹ باکس میں کوئی قیمت نہیں ہے۔ یا ہم سیلسیس سے میٹر یا سینٹی میٹر میں تبدیل کرنے کی کوشش کر رہے ہیں ، جو حقیقت میں ممکن نہیں ہے۔ اس قسم کی صورتحال کو استثناء کہا جاتا ہے اور ہمیں ایسی غلطیوں سے نمٹنے کے لئے کوڈ لکھ کر اس سے گریز کرنا چاہئے۔
آئیے پہلی قسم کی غلطی کو حل کریں جو اس وقت ہوسکتی ہے جب ہم اپنی درخواست چلاتے ہیں۔ یعنی ، ہم ٹیکسٹ فیلڈ میں تبدیل ہونے والی اپنی قدر لکھنے سے محروم رہتے ہیں۔ اس منظر نامے کے ل we ، ہمیں اپنے صارفین کو قیمت داخل کرنے اور پھر آگے بڑھنے کے لئے متنبہ کرنا ہوگا۔
ہم اس کے لئے یو آئی ایلرٹ ویو استعمال کرسکتے ہیں۔ ہم showAlertWithMessage (NSString *) پیغام نامی ایک طریقہ لکھ سکتے ہیں۔ اس طریقہ کار میں ، ہم ایک الرٹ ویو کا اعلان کرسکتے ہیں اور پھر اسے شو () کے طریقہ کار کا استعمال کرتے ہوئے ظاہر کرسکتے ہیں۔ طریقہ کار کا کوڈ مندرجہ ذیل ہوگا۔
- (باطل) showAlertWithMessage: (NSString *) پیغام {UIAlertView * انتصاب نظریہ = [[UIAlertView مختص] initWithTitle: @ 'غلطی' پیغام: پیغام مندوب: خود منسوخ کریں بٹن ٹائٹل: نیل دیگر بٹن ٹائٹلز: @ 'ٹھیک ہے' ، نیل = الرٹ ویو۔ _ResultLabel.text='کوئی نتیجہ نہیں' [الرٹویو شو]}
اب جب صارف کنورٹ بٹن پر کلیک کرتا ہے تو اس کو تبادلوں کے نام سے پکارا جانا چاہئے۔ تبادلہ قدر میں داخل ہوئے بغیر نہیں کیا جانا چاہئے۔ لہذا تبدیل کرنے کے طریقہ کار کی تعریف میں ، ہمیں یہ چیک کرنا ہوگا کہ ٹیکسٹ فیلڈ کی لمبائی صفر سے زیادہ ہے یا مساوی ہے یا نہیں۔ اگر یہ تب ہے تو تبادلہ کریں ، ورنہ انتباہ ظاہر کریں۔ لہذا ، کنورٹ بٹن کوڈ اس طرح ہوگا:
- (آئی بی اےکشن) کنورٹ کریں: (UIButton *) بھیجنے والا {اگر ([_ ValueTextField.text لمبائی]]<= 0) { [self showAlertWithMessage:@' Please enter the value'] } else { float res=0.0 float val=[_ValueTextField.text floatValue] NSLog(@'value %f',val) switch(selectedRow) { case 0:// Celsius to Fahrenheit res=(val*1.8)+32break case 1: // Fahrenheit to Celsius res=(val-32)/1.8break case 2: // meter to centimeter res= val*100 break case 3://centimeter to meter res=val*0.01 break default: res=0.0 } NSString *final= [NSString stringWithFormat:@'%.02f',res] _ResultLabel.text = final } }
اب ایپ کو چلائیں اور ٹیکسٹ فیلڈ میں قدریں داخل کیے بغیر کنورٹ بٹن پر کلک کرنے کی کوشش کریں۔
دوسری قسم کی رعایت جو واقع ہوسکتی ہے وہ ہے اگر پہلے اجزاء کی قدر UIPickerView کے دوسرے جزو کی قدر کے ساتھ مماثل نہیں ہے۔ اس کے ل we ، ہم چیک کرتے ہیں کہ آیا دوسرے اجزاء کی موجودہ منتخب شدہ جزو کی صف کی قیمت اس طریقہ کار کے ڈو سلیکٹرا () مندوب کے ذریعہ لوٹی ہوئی قطار کی قیمت کے برابر ہے۔ اگر حالت مماثلت نہیں رکھتی ہے ، تو پھر تبادلہ ممکن نہیں ہے اور اگر اقدار ملتی ہیں تو تبادلہ کیا جاسکتا ہے۔
ہم اس منطق کو اس طرح نافذ کرسکتے ہیں ،
- (آئی بی اےکشن) کنورٹ کریں: (UIButton *) بھیجنے والا {اگر ([_ ValueTextField.text لمبائی]]<= 0) { [self showAlertWithMessage:@' Please enter the value'] } else { _ResultLabel.textColor= [UIColor blackColor] float res=0.0 NSInteger n =[_picker2 selectedRowInComponent:data2comp] if(n==secondrow) { float val=[_ValueTextField.text floatValue] NSLog(@'value %f',val) switch(selectedRow) { case 0:// Celsius to Fahrenheit res=(val*1.8)+32break case 1: // Fahrenheit to Celsius res=(val-32)/1.8break case 2: // meter to centimeter res= val*100 break case 3://centimeter to meter res=val*0.01 break default: res=0.0 } NSString *final= [NSString stringWithFormat:@'%.02f',res] _ResultLabel.text = final } else { // code for displaying error. _ResultLabel.textColor= [UIColor redColor] _ResultLabel.text = @'Result cannot be calculated' } }
پہلے ایپینٹ میں سلیکشن کرنے کے بعد اب ایپ چلائیں اور دوسرے جزو کی ویلیو کو تبدیل کرکے دیکھیں۔
آپ غلطی کا پیغام دیکھ سکتے ہیں ، کہ نتیجہ کا حساب نہیں کیا جاسکتا۔ آپ دیکھیں گے کہ غلطی کا پیغام اسی رزلٹ لیبل میں چھپا تھا ، اور یہ کہ یہ پیغام لمبا ہے۔ لہذا یہی وجہ ہے کہ لیبل کو سابقہ واقفیت سے نیچے لے جایا گیا تھا۔
لہذا ، ہماری تبادلوں کی ایپ مکمل ہے۔ آپ اپنی پسند کے مطابق ایپ میں زیادہ فعالیت شامل کرسکتے ہیں اور اپنی تخلیقی صلاحیتوں کے مطابق اسے مزید خوبصورت بنا سکتے ہیں۔
ہمارے لئے ایک سوال ہے؟ تبصرے کے سیکشن میں ان کا تذکرہ کریں اور ہم آپ کو واپس ملیں گے۔
متعلقہ اشاعت:
جاوا میں ڈیٹا سٹرکچر کیا ہے؟