iOS aplikacija: rad s višekomponentnim biračem



Ovaj blog govori o stvaranju ios aplikacije koja prikazuje pretvorbu iz jedne jedinice u drugu. Opisuje rad berača Mutlicomponent, upozorenja itd.

kako koristiti snagu u javi -

Da biste stekli temeljit uvid, pročitajte . Ovo je drugi blog iz serije aplikacija ios.





Ako ste iskusni programer i znatiželjan je rad višekomponentnog birača, došli ste na pravi blog. Na ovom blogu govorit ću o tome kako proširiti našu aplikaciju za pretvorbu s više funkcionalnosti primjenom višekomponentnog birača, kao i o tome kako izvršiti izuzetno rukovanje pomoću upozorenja.

Uzadnji blog,to smo vidjeli kad nešto upišemo u polje za tekst, tipkovnica će iskočiti. Vrijednost koju treba pretvoriti upisuje se u tekstualno polje i tada vidimo da tipkovnica ne nestaje.



Da bismo riješili ovaj problem, moramo dodati gumb koji pokriva cijeli prikaz. Kad korisnik dodirne bilo koje mjesto u pozadini, tipkovnica bi trebala nestati.

Idemo naprijed i učinimo to. Povucite gumb, postavite vrstu gumba kao prilagođenu, a boju teksta kao prozirnu boju iz inspektora atributa.

Inspektor svojstava



i odaberite Editor> Arrange> Send to Back

i promijenite veličinu gumba na takav način da odgovara cijelom prikazu.

Ovaj gumb sada djeluje kao nevidljivi gumb u pozadini koji se klikne da tipkovnica nestane. Napišimo IBAction za isto, odaberite način rada pomoćnika uređivača i pritisnite + povucite do ViewController.h. Postavite Connection na Action i imenujte BackgroundButton i kliknite connect.

Kôd kontrolera pogleda sada izgleda ovako.

#import @interface ViewController: UIViewController @property (strong, nonatomic) IBOutlet UITextField * ValueTextField @property (strong, nonatomic) IBOutlet UIPickerView * picker2 @property (strong, nonatomic) NSArray * data @propertyIL strongbel, strong - (IBAction) Pretvori: (UIButton *) pošiljatelj - (IBAction) backgroundButton: (id) sender @end

Prebacite se na ViewController.m, a zatim napišite sljedeći kod.

- (IBAction) backgroundButton: (id) pošiljatelj {[_ValueTextField resignFirstResponder] [_picker2 resignFirstResponder] [_ResultLabel resignFirstResponder]}

Ovdje kod svim ostalim objektima poručuje da daju status prvog odgovornika kada se otkrije dodir. Sada pokrenite aplikaciju i pogledajte. Kad dodirnete pozadinu, moći ćete otkriti da tipkovnica nestaje. Sada da se tipkovnica pokrene kad završite s tipkanjem, pozovite metodu backgroundButton u metodi didselectRow () na biraču. Tako će kod metode biti sljedeći.

- (void) pickerView: (UIPickerView *) pickerView didSelectRow: (NSInteger) redak inComponent: (NSInteger) komponenta {selectedValue = _data [row] [self backgroundButton: 0]}

Sada možete raditi na dijelu uljepšavanja aplikacije, poput dodavanja pozadine, a možda čak i davanja fantastične slike gumba. Međutim, u mojoj ću postaviti pozadinsku sliku.
Da biste to učinili, prvo pronađite odgovarajuću sliku! Zatim ga dodajte u mapu Images.xcassets i promijenite sliku sa 1x na 2x zaslon u univerzalnom obliku.

Pokrenite aplikaciju i provjerite radi li dobro.

Ako promijenim uređaj na iphone 5s.

I pokrenite aplikaciju.

Ovdje možemo vidjeti da sve funkcionira u redu kako se očekivalo. A što ako bih želio dodati pozadinu gumbu i izgled učiniti sličnijim gumbu? Da bih to učinio, prvo bih na ViewController.h dodao IBOutlet za gumb za pretvorbu

@ svojstvo (jako, neatomsko) IBOutlet UIButton * pretvori

a zatim dodajte sljedeći kôd u metodu viewDidLoad ()

self.convert.backgroundColor = [UIColor colorWithRed: 0.4 zelena: 0.8 plava: 1.0 alfa: 1.0] [_convert setTitleColor: [UIColor whiteColor] forState: UIControlStateNormal]

Pokrenimo našu aplikaciju i provjerimo je li to onako kako nam se sviđa.

Ok super! Sigurno ste primijetili da sam i ja promijenio položaj oznake rezultata, razlog promjene nešto ću objasniti kasnije.

Znamo da se naša aplikacija pretvara iz Celzija u Fahrenheit i obrnuto. Pa, što kažete na dodavanje još nekoliko funkcija ili jedinica za pretvorbu? Da bismo to učinili, u UIPickerView moramo dodati još jednu komponentu koja daje odgovarajući odabir kada je jedinica odabrana u prvoj komponenti birača.

Da bi se birač podijelio na dvije komponente, moramo dodati novi NSArray data2, koji će sadržavati podatke za drugu komponentu. Također, definirajte dvije konstante koje će predstavljati naše dvije komponente. Ovdje je lijeva komponenta proglašena 0, a desna komponenta 1 zbog jednostavnosti programiranja.

Vaša datoteka ViewController.h izgleda

#import # define data1comp 0 # define data2comp 1 @interface ViewController: UIViewController @property (strong, nonatomic) IBOutlet UITextField * ValueTextField @property (strong, nonatomic) IBOutlet UIPickerView * picker2 @property (strong, nonatromic * data (Nonatray) jak, neatomičan) NSArray * data2 @property (strong, nonatomic) IBOutlet UILabel * ResultLabel @property (strong, nonatomic) IBOutlet UIButton * convert - (IBAction) Convert: (UIButton *) pošiljalac - (IBAction) backgroundButton: (id) pošiljatelj @kraj

Sada definirajte niz podataka2 u metodi ViewDidLoad (). Sad kad imamo oba izvora podataka, moramo biti sposobni napisati kod za birač na takav način da kada odaberemo stavku iz prve komponente birača, druga bi se komponenta automatski trebala promijeniti u odgovarajuću vrijednost. Druga komponenta ovisi o odabiru prve.
Za to moramo definirati rječnik koji će pohraniti ključeve i vrijednosti. Ključevi sadrže podatke koji odgovaraju prvoj komponenti birača, a vrijednosti sadrže podatke koji odgovaraju drugoj komponenti birača.

- (void) viewDidLoad {[super viewDidLoad] // Izvršite dodatna podešavanja nakon učitavanja pogleda, obično iz vrha. _data1 = [NSArray arrayWithObjects: @ 'Celsius', @ 'Fahrenheit', @ 'Meter', @ 'Centimeter', nil] data2 = [NSArray arrayWithObjects: @ 'Centimetar', @ 'Meter', @ 'Fahrenheit', @ 'Celzijus', nil] rječnik = [NSDictionary dictionaryWithObjectsAndKeys: @ 'Celcius', @ 'Farenheit', @ 'Farenheit', @ 'Celcius', @ 'Meter', @ 'Centimeter', @ 'Centimeter', @ 'Meter ', nil] self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: (@' bg2.png ')]]}

Sada moramo promijeniti izvor podataka i delegirati metode trenutnog birača na sljedeće, tako da imamo podatke ispunjene u obje komponente.

- (NSInteger) numberOfComponentsInPickerView: (UIPickerView *) pickerView {return 2} - (NSInteger) pickerView: (UIPickerView *) pickerView numberOfRowsInComponent: (NSInteger) komponenta {if (komponenta == data1compta) return. [broj samo.data2]} - (NSString *) pickerView: (UIPickerView *) pickerView titleForRow: (NSInteger) red forComponent: (NSInteger) komponenta {if (komponenta == data1comp) {return [self.data1 objectAtIndex: row]} vrati [self.data2 objectAtIndex: row]} - (void) pickerView: (UIPickerView *) pickerView didSelectRow: (NSInteger) red inComponent: (NSInteger) komponenta {[self backgroundButton: 0] if (komponenta == data1comp) {NSString * data11 = [_ data1 objectAtIndex: row] NSArray * a = [dictionary objectForKey: data11] secondrow = [self.data2 indexOfObject: a] [_picker2 selectRow: secondrow inComponent: data2comp animated: YES] [_picker2 reloadComponent: data2comp11 selectedV = redak}}

Ovdje u našoj metodi didSelectRow () dobivamo odabranu vrijednost prve komponente, a zatim je prosljeđujemo kao argument u metodu objectForKey () rječnika i dobivamo odgovarajuću vrijednost za ključ. Da bismo pronašli odgovarajući položaj za vrijednost u drugom nizu, tj. Data2, koristimo metodu indexOfObject () niza i rezultat pohranimo u cjelobrojnu vrijednost.
Zatim ovu cjelobrojnu vrijednost prosljeđujemo metodi berača selectRow: row inComponent: component (). I ponovo učitajte komponentu birača pomoću reloadComponent ().
Nakon što to učinimo, dok odabiremo jednu stavku iz prve komponente, odgovarajuća stavka bit će odabrana u drugoj komponenti birača.

Kôd za didSelectRow ()

- (void) pickerView: (UIPickerView *) pickerView didSelectRow: (NSInteger) red inComponent: (NSInteger) komponenta {[self backgroundButton: 0] if (komponenta == data1comp) {NSString * data11 = [_ data1 objectAtIndex: row] NSAr a = [objekt objektaForKey: data11] secondrow = [self.data2 indexOfObject: a] [_picker2 selectRow: secondrow inComponent: data2comp animirani: DA] [_picker2 reloadComponent: data2comp] selectedValue = data11 selectedRow = row}}

Sada pokrenite aplikaciju i provjerite radi li berač onako kako se očekuje.

Voila! radi!

Nastavimo kodirati gumb za pretvaranje. Raniji birač imao je samo dvije vrijednosti koje se podudaraju, tj. Celzijus i Fahrenheit, a zatim je izračunat rezultat. Ali sada imamo četiri vrijednosti Celzijusa, Fahrenheita, Metra i Centimetra. Stoga sam upotrijebio naredbu switch, koja izračunava vrijednost na temelju odabrane varijable retka.

- (IBAction) Pretvori: (UIButton *) sender {float val = [_ ValueTextField.text floatValue] NSLog (@ 'value% f', val) prekidač (selectedRow) {case 0: // Celsius to Fahrenheit res = (val * 1.8) + 32break slučaj 1: // Fahrenheit do Celzijusa res = (val-32) /1.8break slučaj 2: // Metar do Centimetar res = val * 100 break case 3: // Centimetar do Meter res = val * 0,01 break zadano: res = 0.0} NSString * final = [NSString stringWithFormat: @ '%. 02f', res] _ResultLabel.text = final}

ako pokrenete aplikaciju, vidimo da sve funkcionira u redu.

Sada možemo provjeriti postoje li iznimke koje se mogu pojaviti u našoj aplikaciji. Na primjer, u okviru za tekst nema vrijednosti. Ili pokušavamo pretvoriti iz Celzija u metre ili centimetre, što zapravo nije moguće. Takve se situacije nazivaju iznimkama i moramo ih izbjeći pisanjem koda za obradu takvih pogrešaka.

Riješimo prvu vrstu pogreške koja se može dogoditi kada pokrenemo našu aplikaciju. Odnosno, propuštamo zapisati svoju vrijednost koju ćemo pretvoriti u tekstualno polje. Za ovaj scenarij moramo upozoriti naše korisnike da unesu vrijednost i zatim nastaviti.

Za to možemo koristiti UIAlertView. Možemo napisati metodu koja se zove showAlertWithMessage (NSString *). Ovom metodom možemo proglasiti alertView, a zatim ga napokon prikazati metodom show (). Šifra metode bit će sljedeća.

- (void) showAlertWithMessage: (NSString *) poruka {UIAlertView * alertView = [[UIAlertView alloc] initWithTitle: @ 'Greška' poruka: delegat poruke: self cancelButtonTitle: nil otherButtonTitles: @ 'Okay', niltag = V = 100, Nilta] V _ResultLabel.text=@'Nema rezultata '[alertView show]}

Sada se ova metoda kada korisnik klikne gumb za pretvaranje mora pozvati kao pretvorbu. Pretvorba se ne smije provoditi bez unosa vrijednosti. Dakle, u definiciji metode za pretvorbu moramo provjeriti je li duljina tekstualnog polja veća ili jednaka nuli ili ne. Ako je to slučaj, izvršite pretvorbu, inače prikažite upozorenje. Stoga bi kôd gumba za pretvaranje bio poput:

- (IBAction) Pretvori: (UIButton *) pošiljatelj {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 } }

Sada pokrenite aplikaciju i pokušajte kliknuti na gumb pretvori bez unosa vrijednosti u polje za tekst.

Druga vrsta iznimke koja bi se mogla dogoditi jest ako se vrijednost u prvoj komponenti ne podudara s vrijednošću u drugoj komponenti UIPickerView. U tu svrhu provjeravamo je li trenutna vrijednost reda odabrane komponente druge komponente jednaka vrijednosti vrijednosti retka koju je vratio delegat metode didSelectRow (). Ako se uvjet ne podudara, pretvorba nije moguća, a ako se vrijednosti podudaraju, pretvorba se može izvršiti.

Ovu logiku možemo implementirati na sljedeći način,

- (IBAction) Pretvori: (UIButton *) pošiljatelj {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' } }

Sada pokrenite aplikaciju i pogledajte promjenu vrijednosti u drugoj komponenti nakon što izvršite odabir u prvoj komponenti.

Možete vidjeti poruku pogreške da se rezultat ne može izračunati. Primijetit ćete da je poruka o pogrešci ispisana na istoj naljepnici rezultata i da je poruka dugačka. Zbog toga je naljepnica pomaknuta prema dolje s ranije orijentacije.

qtp vs selen što je bolje

Dakle, naša aplikacija za pretvorbu je dovršena. Aplikaciji možete dodati više funkcionalnosti prema vašem izboru i učiniti je ljepšom prema svojoj kreativnosti.

Imate pitanje za nas? Spomenite ih u odjeljku za komentare i javit ćemo vam se.

Vezane objave: