Velkommen til denne hurtige tipsen på startnivå om å jobbe med handlingsark. I denne opplæringen lærer du hvordan du lager et enkelt handlingsark dynamisk ved hjelp av innhold fra en matrise. Denne teknikken vil tillate deg å bestemme hvor mange knapper som skal plasseres på handlingsarket ved kjøretid, i motsetning til kompileringstid. En praktisk teknikk å ha!
Vi vil lage et enkelt program i denne opplæringen som viser oss en liste over frukt i et handlingsbilde. Hvis du velger en frukt, blir en etiketts tekst oppdatert med den valgte frukten.
Åpne Xcode og velg "Opprett et nytt Xcode-prosjekt". Velg "Single View Application" og klikk "Next". Skriv inn et navn for prosjektet ditt (jeg ringte min "Fruits"), pass på at du velger iPhone for enhetene og velg "Bruk Storyboards" og "Use Automatic Reference Counting". Deretter klikker du "neste" og velg et sted for å lagre prosjektet ditt før du klikker på "opprett".
Vi vil bare bruke dette programmet i portrettmodus, så gå til delen Støttede grensesnittretninger og avmarker liggende retninger.
Åpne Storyboard og dra en etikett fra Objektbiblioteket til Vis kontrolleren. Plasser den øverst på View Controller og sørg for at den er sentrert og den er 280 piksler bred. Åpne Attribut inspektøren og endre justeringen til senter. Til slutt, slett teksten.
Deretter drar du en knapp fra objektbiblioteket til visningskontrolleren og plasserer den like under etiketten. Dobbeltklikk på tittelen og bytt den til "Fruits".
Åpne ViewController.m og endre koden for å lese som følger:
#import "ViewController.h" @interface ViewController ()@property (ikkeatomisk, svak) IBOutlet UILabel * fruitLabel; @property (nonatomic, strong) NSMutableArray * frukt; - (IBAction) showFruits: (id) avsender; @slutt
Her lager vi et utløp for vår etikett, et gjensidig utvalg for å lagre våre frukter, og vi lager en handling for å vise handlingsarket. Vi har også lagt til UIActionSheetDelegate, slik at vi kan oppdatere etiketten når du velger en frukt fra handlingsarket. Merk at alt dette var gjort i klassen forlengelsen fordi ingen av disse egenskapene eller metodene må bli utsatt for en utvendig klasse.
Nå som vi har skapt uttaket og handlingen, trenger vi bare å koble dem til de tilsvarende elementene. Åpne Storyboard og koble til fruitsLabel uttak med etiketten og showFruits:
handling med knappen. Å velge Berør på innsiden som kontrollhendelse for knappen.
Åpne ViewController.m og opprett følgende initialiseringsmetode:
-(id) initWithCoder: (NSCoder *) aDecoder if (selv = [super initWithCoder: aDecoder]) self.fruits = [[NSMutableArray alloker] initWithObjects: @ "Apple", @ "Orange", @ "Banana" "Jordbær", @ "Peach", null]; returner selv;
Her oppretter vi fruktfeltet og lagrer noen frukter i den.
Legg til følgende kode under didReceiveMemoryWarning
metode:
- (IBAction) showFruits: (id) avsender UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle: @ "Velg en frukt" delegat: self cancelButtonTitle: null destruktiveButtonTitle: nil otherButtonTitles: null]; for (NSString * frukt i self.fruits) [actionSheet addButtonWithTitle: frukt]; actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle: @ "Cancel"]; [actionSheet showInView: self.view];
Vi lager først et handlingsbilde, som du normalt ville gjøre. Vi gir den en tittel og en delegat, men vi legger ikke til noen knapper, ikke engang en avbryt-knapp. Hvis vi skulle legge til en avbryt-knapp her, og alle de andre knappene senere, vil avbryt-knappen være på toppen av listen, i stedet for på bunnen.
Deretter bruker vi en rask oppsummeringssløyfe for å gå gjennom alle fruktene som er lagret i fruktfeltet opprettet tidligere. I den for løkken legger vi knapper for alle fruktene til handlingsarket. Etter forløp, legger vi til en avbryt-knapp i handlingsarket. Som du kan se, gjør vi det ved å legge til en knapp med tittelen "Avbryt" til cancelButtonIndex. På denne måten vet handlingsarket at Avbryt-knappen skal være nederst på listen. Endelig viser vi handlingsarket på vanlig måte.
Legg til følgende handlingsdokument for delegeringsprotokoll under showFruits:
handling:
- (void) actionSheet: (UIActionSheet *) actionSheet klikketButtonAtIndex: (NSInteger) buttonIndex if (buttonIndex! = actionSheet.cancelButtonIndex) self.fruitLabel.text = [self.fruits objectAtIndex: buttonIndex];
Denne delegatemetoden blir kalt når du trykker på en knapp fra handlingsarket. Først kontrollerer vi om knappen er trykket på, er en frukt eller Avbryt-knappen. Vi gjør det ved å sammenligne den valgte knappindeksen med Avbryt-knappindeksen. Hvis den valgte knappen er en frukt, oppdaterer vi etiketten med den valgte frukten.
Takk for at du leste dette raske tipset om å lage et handlingsbilde med elementer fra en matrise. Jeg håper du fant det nyttig! Hvis du har spørsmål eller kommentarer til dette raske tipset, legg dem i kommentarfeltet nedenfor.