iOS అనువర్తనం: మల్టీకంపొనెంట్ పికర్‌తో పనిచేస్తోంది



ఈ బ్లాగ్ ఒక యూనిట్ నుండి మరొక యూనిట్కు మార్పిడిని ప్రదర్శించే iOS అనువర్తనాన్ని సృష్టించడం. ఇది మట్లికాంపొనెంట్ పికర్, హెచ్చరికలు మొదలైన వాటి పనిని వివరిస్తుంది.

పూర్తి అవగాహన పొందడానికి, దయచేసి చదవండి . ఇది iOS అనువర్తన శ్రేణి యొక్క రెండవ బ్లాగ్.





మీరు మల్టీకంపొనెంట్ పికర్ యొక్క పని గురించి ఆసక్తిగా ఉన్న అనుభవజ్ఞుడైన డెవలపర్ అయితే మీరు సరైన బ్లాగుకు వచ్చారు. ఈ బ్లాగులో, మల్టీకంపొనెంట్ పికర్‌ను అమలు చేయడం ద్వారా మా మార్పిడి అనువర్తనాన్ని మరింత కార్యాచరణతో ఎలా విస్తరించాలో మరియు హెచ్చరికలను ఉపయోగించి అసాధారణమైన నిర్వహణను ఎలా చేయాలో గురించి మాట్లాడతాను.

లోచివరి బ్లాగ్,మేము దానిని చూశాము మేము టెక్స్ట్ ఫీల్డ్‌లో ఏదైనా టైప్ చేసినప్పుడు, కీబోర్డ్ కనిపిస్తుంది. మార్చవలసిన విలువ టెక్స్ట్ ఫీల్డ్‌లో టైప్ చేయబడి, ఆపై కీబోర్డ్ దూరంగా ఉండకుండా చూస్తాము.



ఈ సమస్యను పరిష్కరించడానికి మేము మొత్తం వీక్షణను కవర్ చేసే బటన్‌ను జోడించాలి. వినియోగదారు నేపథ్యంలో ఎక్కడైనా తాకినప్పుడు, కీబోర్డ్ కనిపించదు.

ఇప్పుడు, ముందుకు సాగండి. ఒక బటన్‌ను లాగండి, బటన్ రకాన్ని కస్టమ్‌గా మరియు టెక్స్ట్ కలర్‌ను గుణాల ఇన్‌స్పెక్టర్ నుండి స్పష్టమైన రంగుగా సెట్ చేయండి.

గుణాలు ఇన్స్పెక్టర్



మళ్ళి జావా ఎలా ఉపయోగించాలి

మరియు ఎడిటర్> అమర్చండి> తిరిగి పంపండి ఎంచుకోండి

మరియు మొత్తం వీక్షణకు సరిపోయే విధంగా బటన్ పరిమాణాన్ని మార్చండి.

ఈ బటన్ ఇప్పుడు నేపథ్య అదృశ్య బటన్‌గా పనిచేస్తుంది, ఇది కీబోర్డ్ అదృశ్యం కావడానికి క్లిక్ చేయబడింది. దాని కోసం IBAction ను వ్రాద్దాం, అసిస్టెంట్ ఎడిటర్ మోడ్‌ను ఎంచుకుని, ViewController.h కు కంట్రోల్ + లాగండి. కనెక్షన్‌కు చర్యను మరియు పేరును బ్యాక్‌గ్రౌండ్‌బటన్‌కు సెట్ చేసి కనెక్ట్ క్లిక్ చేయండి.

వీక్షణ నియంత్రిక కోడ్ ఇప్పుడు ఇలా ఉంది.

# దిగుమతి ter ఇంటర్‌ఫేస్ వ్యూ కంట్రోలర్: UIViewController ropproperty (strong, nonatomic) IBOutlet UITextField * ValueTextField ropproperty (strong, nonatomic) IBOutlet UIPickerView * picker2 ropproperty (strong, nonatomic) NSArray * nonproatilT - (IBAction) మార్చండి: (UIButton *) పంపినవారు - (IBAction) backgroundButton: (id) పంపినవారు @end

ViewController.m కు మారండి, ఆపై క్రింది కోడ్ రాయండి.

- (IBAction) backgroundButton: (id) పంపినవారు {[_ValueTextField resignFirstResponder] [_picker2 resignFirstResponder] [_ResultLabel resignFirstResponder]}

టచ్ కనుగొనబడినప్పుడు మొదటి ప్రతిస్పందన స్థితిని ఇవ్వడానికి ఇక్కడ కోడ్ అన్ని ఇతర వస్తువులను చెబుతుంది. ఇప్పుడు, అనువర్తనాన్ని అమలు చేసి చూడండి. మీరు నేపథ్యాన్ని తాకినప్పుడు కీబోర్డ్ వెళ్లిపోతుందని మీరు కనుగొనగలరు. ఇప్పుడు మీరు టైప్ చేసినప్పుడు కీబోర్డ్ వెళ్ళడానికి, పికర్ యొక్క డిడ్సెలెక్ట్రో () పద్ధతిలో బ్యాక్‌గ్రౌండ్‌బటన్ పద్ధతిని కాల్ చేయండి. కాబట్టి పద్ధతి కోడ్ ఈ క్రింది విధంగా ఉంటుంది.

- (శూన్యమైనది) పికర్‌వ్యూ: (UIPickerView *) pickerView didSelectRow: (NSInteger) in in Component: (NSInteger) భాగం {selectValue = _data [row] [self backgroundButton: 0]}

ఇప్పుడు, మీరు అనువర్తనం యొక్క సుందరీకరణ భాగంలో పని చేయవచ్చు, నేపథ్యాన్ని జోడించడం మరియు ఫాన్సీ బటన్ చిత్రాన్ని ఇవ్వడం వంటివి. అయితే, నాలో, నేను నేపథ్య చిత్రాన్ని సెట్ చేస్తాను.
అలా చేయడానికి, మొదట తగిన చిత్రాన్ని కనుగొనండి! అప్పుడు దాన్ని Images.xcassets అనే ఫోల్డర్‌కు జోడించి, చిత్రాన్ని యూనివర్సల్‌లో 1x నుండి 2x స్క్రీన్‌కు మార్చండి.

అనువర్తనాన్ని అమలు చేయండి మరియు ఇది బాగా పనిచేస్తుందో లేదో చూడండి.

నేను పరికరాన్ని ఐఫోన్ 5 లకు మార్చినట్లయితే.

మరియు అనువర్తనాన్ని అమలు చేయండి.

ప్రతిదీ .హించిన విధంగా బాగా పనిచేస్తుందని ఇక్కడ మనం చూడవచ్చు. ఇప్పుడు నేను నా బటన్‌కు నేపథ్యాన్ని జోడించి, ప్రదర్శనను బటన్ లాగా చేయాలనుకుంటే? అలా చేయడానికి, నేను మొదట ViewController.h కు కన్వర్ట్ బటన్ కోసం IBOutlet ని జోడిస్తాను

rop ప్రొపెర్టీ (బలమైన, నాన్‌టామిక్) IBOutlet UIButton * కన్వర్ట్

ఆపై viewDidLoad () పద్ధతిలో కింది కోడ్‌ను జోడించండి

self.convert.backgroundColor = [UIColor colorWithRed: 0.4 green: 0.8 blue: 1.0 alpha: 1.0] [_convert setTitleColor: [UIColor whiteColor] forState: UIControlStateNormal]

మన అనువర్తనాన్ని అమలు చేసి చూద్దాం, అది మనకు నచ్చిన విధంగా ఉంటే.

సరే బాగుంది! ఫలిత లేబుల్ యొక్క స్థానాలను నేను మార్చానని మీరు గమనించి ఉండాలి, మార్పుకు కారణం నేను తరువాత వివరిస్తాను.

మా అనువర్తనం సెల్సియస్ నుండి ఫారెన్‌హీట్‌గా మారుతుందని మాకు తెలుసు. కాబట్టి, మార్చడానికి మరికొన్ని విధులు లేదా యూనిట్లను జోడించడం ఎలా? అలా చేయడానికి, పికర్ యొక్క మొదటి భాగంలో ఒక యూనిట్ ఎంచుకోబడినప్పుడు, తగిన ఎంపికను ఇచ్చే UIPickerView కు మరో భాగాన్ని జోడించాలి.

జావాలో ఒక వస్తువును ఎలా కాపీ చేయాలి

ఒక పికర్‌ను రెండు భాగాలుగా విభజించడానికి, మేము క్రొత్త NSArray డేటా 2 ను జోడించాలి, ఇది రెండవ భాగం కోసం డేటాను కలిగి ఉంటుంది. అలాగే, మా రెండు భాగాలను సూచించే రెండు స్థిరాంకాలను నిర్వచించండి. ఇక్కడ, ప్రోగ్రామింగ్ యొక్క సరళత కోసం ఎడమ భాగం 0 గా మరియు కుడి భాగం 1 గా ప్రకటించబడింది.

మీ ViewController.h ఫైల్ కనిపిస్తుంది

# దిగుమతి # డేటా 1 కాంప్‌ను నిర్వచించండి 0 # డేటా 2 కాంప్ 1 ని నిర్వచించండి ఇంటర్‌ఫేస్ వ్యూ కంట్రోలర్: యుఐవివ్యూకంట్రోలర్ rop ప్రొపెర్టీ (బలమైన, నాన్‌టొమిక్) ఐబిఆట్లెట్ యుఐటెక్స్ట్ ఫీల్డ్ * వాల్యూటెక్స్ట్ ఫీల్డ్ @ ప్రాపర్టీ (స్ట్రాంగ్, నాన్‌టామిక్) ఐబిఆట్లెట్ యుఐపికర్‌వ్యూ * పికర్ 2 ro ప్రొప్రోటీ 1 strong, nonatomic) NSArray * data2 roproperty (strong, nonatomic) IBOutlet UILabel * ResultLabel roproperty (strong, nonatomic) IBOutlet UIButton * convert - (IBAction) Convert: (UIButton *) పంపినవారు - (IBAction) backgroundButton: (id) పంపినవారు .end

ఇప్పుడు ViewDidLoad () పద్ధతిలో శ్రేణి డేటా 2 ని నిర్వచించండి. ఇప్పుడు మనకు డేటా సోర్సెస్ రెండూ ఉన్నందున, మేము పికర్ యొక్క మొదటి భాగం నుండి ఒక అంశాన్ని ఎన్నుకున్నప్పుడు, రెండవ భాగం స్వయంచాలకంగా సంబంధిత విలువకు మార్చబడే విధంగా పికర్ కోసం కోడ్ రాయగలగాలి. రెండవ భాగం మొదటి ఎంపికపై ఆధారపడి ఉంటుంది.
దీని కోసం, మేము కీలు మరియు విలువలను నిల్వ చేసే నిఘంటువును నిర్వచించాలి. కీస్ పికర్ యొక్క మొదటి భాగానికి సంబంధించిన డేటాను కలిగి ఉంటాయి మరియు విలువలు పికర్ యొక్క రెండవ భాగానికి సంబంధించిన డేటాను కలిగి ఉంటాయి.

- (శూన్యమైనది) viewDidLoad super [super viewDidLoad] // వీక్షణను లోడ్ చేసిన తర్వాత ఏదైనా అదనపు సెటప్ చేయండి, సాధారణంగా ఒక నిబ్ నుండి. _data1 = [NSArray arrayWithObjects: Cells 'సెల్సియస్', @ 'ఫారెన్‌హీట్', @ 'మీటర్', @ 'సెంటీమీటర్', నిల్] డేటా 2 = [NSArray arrayWithObjects: Cent 'సెంటీమీటర్', @ 'మీటర్', @ 'ఫారెన్‌హీట్', @ 'సెల్సియస్', నిల్] డిక్షనరీ = [ఎన్ఎస్ డిక్షనరీ డిక్షనరీ విత్ఆబ్జెక్ట్స్అండ్ కీస్: @ 'సెల్సియస్', @ 'ఫారెన్‌హీట్', @ 'ఫారెన్‌హీట్', @ 'సెల్సియస్', @ 'మీటర్', @ 'సెంటీమీటర్', @ 'మీటర్ ', nil] self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: (@' bg2.png ')]]}

ఇప్పుడు, మేము డేటా సోర్స్‌ను మార్చాలి మరియు ప్రస్తుత పికర్ యొక్క పద్ధతులను కింది వాటికి అప్పగించాలి, తద్వారా రెండు భాగాలలోనూ డేటా నిండి ఉంటుంది.

- (NSInteger) numberOfComponentsInPickerView: (UIPickerView *) pickerView {return 2} - (NSInteger) pickerView: (UIPickerView *) pickerView numberOfRowsInComponent: (NSInteger) భాగం {if (భాగం = return data) [self.data2 count]} - (NSString *) pickerView: (UIPickerView *) pickerView titleForRow: (NSInteger) for for Component: (NSInteger) భాగం {if (భాగం == data1comp) {తిరిగి [self.data1 objectAtIndex: row]} తిరిగి [self.data2 objectAtIndex: row]} - (శూన్యమైన) పికర్‌వ్యూ: (UIPickerView *) pickerView didSelectRow: (NSInteger) in inComponent: (NSInteger) భాగం {[self backgroundButton: 0] if (భాగం == data1comp) {NSString * data11 = [_ data1 objectAtIndex: row] NSArray * a = [నిఘంటువు ఆబ్జెక్ట్ఫోర్కీ: data11] secondrow = [self.data2 indexOfObject: a] [_picker2 selectRow: secondrow inComponent: data2comp animated: YES] [_picker2 dataLowComponent = వరుస}}

ఇక్కడ మా didSelectRow () పద్ధతిలో, మేము మొదటి భాగం యొక్క ఎంచుకున్న విలువను పొందుతున్నాము, తరువాత దానిని నిఘంటువు యొక్క ఆబ్జెక్ట్ఫోర్కే () పద్ధతికి వాదనగా పంపుతాము మరియు కీ కోసం సంబంధిత విలువను పొందుతాము. రెండవ శ్రేణి అనగా డేటా 2 లో విలువకు సంబంధిత స్థానాన్ని కనుగొనడానికి, మేము శ్రేణి యొక్క ఇండెక్స్ఆఫ్ ఆబ్జెక్ట్ () పద్ధతిని ఉపయోగిస్తాము మరియు ఫలితాన్ని పూర్ణాంక విలువలో నిల్వ చేస్తాము.
అప్పుడు మేము ఈ పూర్ణాంక విలువను పికర్ పద్ధతికి ఎంచుకుంటాము రౌ: అడ్డు వరుసలో కాంపోనెంట్: భాగం () పద్ధతి. మరియు రీలోడ్ కాంపోనెంట్ () ను ఉపయోగించి పికర్ యొక్క భాగాన్ని రీలోడ్ చేయండి.
మేము దీన్ని పూర్తి చేసిన తర్వాత, మొదటి భాగం నుండి ఒక అంశాన్ని ఎంచుకున్నప్పుడు, సంబంధిత అంశం పికర్ యొక్క రెండవ భాగంలో ఎంపిక చేయబడుతుంది.

DoSelectRow () కోసం కోడ్

- (శూన్యమైనది) పికర్‌వ్యూ: (UIPickerView *) pickerView didSelectRow: (NSInteger) in in Component: (NSInteger) భాగం {[self backgroundButton: 0] if (భాగం == data1comp) {NSString * data11 = [_ data1 objectAtIndex: *] a = [నిఘంటువు ఆబ్జెక్ట్ఫోర్కీ: డేటా 11] సెకండ్రో = [సెల్ఫ్.డేటా 2 ఇండెక్స్ఆఫ్ ఆబ్జెక్ట్: ఎ] [_పిక్కర్ 2 సెలెక్ట్‌రో: సెకండ్రో ఇన్ కాంపోనెంట్: డేటా 2 కాంప్ యానిమేటెడ్: అవును] [_పిక్కర్ 2 రీలోడ్ కాంపోనెంట్: డేటా 2 కాంప్] ఎంచుకున్న విలువ = డేటా 11 ఎంపిక

ఇప్పుడు అనువర్తనాన్ని అమలు చేయండి మరియు పికర్ .హించిన విధంగా పనిచేస్తుందో లేదో చూడండి.

వోయిలా! ఇది పనిచేస్తుంది!

కాబట్టి మన కన్వర్ట్ బటన్ కోడ్ చేయడాన్ని కొనసాగిద్దాం. మునుపటి పికర్‌కు సెల్సియస్ మరియు ఫారెన్‌హీట్‌తో సరిపోలడానికి కేవలం రెండు విలువలు ఉన్నాయి మరియు తరువాత ఫలితం లెక్కించబడుతుంది. కానీ ఇప్పుడు మనకు సెల్సియస్, ఫారెన్‌హీట్, మీటర్ మరియు సెంటీమీటర్ అనే నాలుగు విలువలు ఉన్నాయి. కాబట్టి నేను స్విచ్ స్టేట్మెంట్ ఉపయోగించాను, అది ఎంచుకున్న అడ్డు వేరియబుల్ ఆధారంగా విలువను లెక్కిస్తుంది.

- (IBAction) మార్చండి: (UIButton *) పంపినవారు {float val = [_ ValueTextField.text floatValue] NSLog (value 'value% f', val) స్విచ్ (ఎంచుకున్న రో) {కేసు 0: // సెల్సియస్ టు ఫారెన్‌హీట్ res = (val * 1.8) + 32 బ్రేక్ కేసు 1: // ఫారెన్‌హీట్ టు సెల్సియస్ రెస్ = (వాల్ -32) / 1.8 బ్రేక్ కేసు 2: // మీటర్ టు సెంటీమీటర్ రెస్ = వాల్ * 100 బ్రేక్ కేసు 3: // సెంటీమీటర్ నుండి మీటర్ రెస్ = వాల్ * 0.01 బ్రేక్ డిఫాల్ట్: res = 0.0} NSString * final = [NSString stringWithFormat:% '%. 02f', res] _ResultLabel.text = final}

మీరు అనువర్తనాన్ని అమలు చేస్తే, ప్రతిదీ బాగా పనిచేస్తుందని మేము చూడవచ్చు.

ఇప్పుడు, మా అనువర్తనంలో సంభవించే మినహాయింపుల కోసం మేము తనిఖీ చేయవచ్చు. ఉదాహరణకు, టెక్స్ట్ బాక్స్‌లో విలువ లేదు. లేదా మేము సెల్సియస్ నుండి మీటర్ లేదా సెంటీమీటర్‌గా మార్చడానికి ప్రయత్నిస్తున్నాము, ఇది వాస్తవానికి సాధ్యం కాదు. ఈ రకమైన పరిస్థితులను మినహాయింపులు అని పిలుస్తారు మరియు అలాంటి లోపాలను పరిష్కరించడానికి కోడ్ రాయడం ద్వారా మేము దానిని తప్పించాలి.

మేము మా అనువర్తనాన్ని అమలు చేస్తున్నప్పుడు సంభవించే మొదటి రకమైన లోపాన్ని పరిష్కరిద్దాం. అంటే, టెక్స్ట్‌ఫీల్డ్‌లో మార్చడానికి మా విలువను వ్రాయడం మనం కోల్పోతాము. ఈ దృష్టాంతంలో, విలువను నమోదు చేయడానికి మేము మా వినియోగదారులను అప్రమత్తం చేసి, ఆపై కొనసాగాలి.

దీని కోసం మేము UIAlertView ని ఉపయోగించవచ్చు. మేము షోఅలెర్ట్ విత్ మెసేజ్ (ఎన్ఎస్ స్ట్రింగ్ *) సందేశం అనే పద్ధతిని వ్రాయవచ్చు. ఈ పద్ధతిలో, మేము ఒక హెచ్చరిక వీక్షణను ప్రకటించి, చివరికి దానిని ప్రదర్శన () పద్ధతిని ఉపయోగించి ప్రదర్శించవచ్చు. పద్ధతి యొక్క కోడ్ క్రింది విధంగా ఉంటుంది.

-. _ResultLabel.text=@ 'ఫలితం లేదు' [హెచ్చరిక వీక్షణ ప్రదర్శన]}

ఇప్పుడు వినియోగదారు కన్వర్ట్ బటన్‌ను క్లిక్ చేసినప్పుడు ఈ పద్ధతిని కన్వర్షన్ అని పిలవాలి. విలువను నమోదు చేయకుండా మార్పిడి చేయకూడదు. కాబట్టి మార్పిడి కోసం పద్ధతి నిర్వచనంలో, టెక్స్ట్ఫీల్డ్ యొక్క పొడవు సున్నా కంటే ఎక్కువ లేదా సమానంగా ఉందా అని మనం తనిఖీ చేయాలి. అది ఉంటే మార్పిడి చేయండి, లేకపోతే హెచ్చరికను ప్రదర్శించండి. కాబట్టి, కన్వర్ట్ బటన్ కోడ్ ఇలా ఉంటుంది:

- (IBAction) మార్చండి: (UIButton *) పంపినవారు {if ([_ ValueTextField.text length]<= 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 యొక్క రెండవ భాగం లోని విలువతో సరిపోలకపోతే రెండవ రకమైన మినహాయింపు. దీని కోసం, రెండవ భాగం యొక్క ప్రస్తుత ఎంచుకున్న భాగం వరుస విలువ పద్ధతి యొక్క didSelectRow () ప్రతినిధి తిరిగి ఇచ్చిన వరుస విలువ విలువకు సమానంగా ఉందో లేదో మేము తనిఖీ చేస్తాము. షరతు సరిపోలకపోతే, మార్పిడి సాధ్యం కాదు మరియు విలువలు సరిపోలితే మార్పిడి చేయవచ్చు.

మేము ఈ తర్కాన్ని ఈ క్రింది విధంగా అమలు చేయవచ్చు,

- (IBAction) మార్చండి: (UIButton *) పంపినవారు {if ([_ ValueTextField.text length]<= 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' } }

ఇప్పుడు అనువర్తనాన్ని అమలు చేయండి మరియు మీరు మొదటి భాగంలో ఎంపిక చేసిన తర్వాత రెండవ భాగంలో విలువను మార్చడం ద్వారా చూడండి.

ఫలితాన్ని లెక్కించలేమని మీరు దోష సందేశాన్ని చూడవచ్చు. దోష సందేశం అదే ఫలిత లేబుల్‌లో ముద్రించబడిందని మరియు సందేశం పొడవుగా ఉందని మీరు గమనించవచ్చు. అందువల్ల మునుపటి ధోరణి నుండి లేబుల్ క్రిందికి తరలించబడింది.

కాబట్టి, మా మార్పిడి అనువర్తనం పూర్తయింది. మీరు మీ ఎంపిక ప్రకారం అనువర్తనానికి మరింత కార్యాచరణను జోడించవచ్చు మరియు మీ సృజనాత్మకతకు అనుగుణంగా మరింత అందంగా చేయవచ్చు.

మాకు ప్రశ్న ఉందా? వ్యాఖ్యల విభాగంలో వాటిని ప్రస్తావించండి మరియు మేము మిమ్మల్ని సంప్రదిస్తాము.

సంబంధిత పోస్ట్లు: