I denne nybegynnerens iOS SDK-opplæring, vil vi gå over hvordan å implementere UIActionSheet
og UIActionSheetDelegate
. Denne klassen tillater deg å enkelt spørre brukeren for innspilling ved å vise en liste over menyalternativer.
Start Xcode og klikk Fil> Nytt> Prosjekt. Klikk på "Application" under IOS-panelet til venstre og klikk deretter på "Single View Application" -ikonet. Klikk på "Neste".
I feltet "Produktnavn" skriver du "ActionSheetDemo" og skriver inn et navn for firmaidentifikatoren, for eksempel "com.mobiletuts." Velg "iPhone" fra menyen "Enhetsfamilie". Fjern merket for "Bruk Storyboards" og "Include Unit Tests", og merk av "Use Automatic Reference Counting". Klikk på "Neste", velg et sted for å lagre prosjektet, og klikk "Opprett".
Først erklærer vi og definerer en metode som vil ta opp handlingsarket. Klikk på "ViewController.m" -filen og legg til følgende metodedeklarasjon og -definisjon:
@interface ViewController () - (void) showActionSheet: (id) avsender; // Deklar metode for å vise handlingsblad @end @implementation ViewController ... - (void) showActionSheet: (id) avsender ...
Se etter viewDidLoad:
metode i samme fil, og legg til følgende kode for å lage en knapp programmatisk:
UIButton * knapp = [UIButton buttonWithType: UIButtonTypeRoundedRect]; button.frame = CGRectMake (20,0f, 186,0f, 280,0f, 88,0f); [knapp setTitle: @ "Vis handlingsark" forState: UIControlStateNormal]; [knapp setTitleColor: [UIColor blackColor] forState: UIControlStateNormal]; button.tintColor = [UIColor darkGrayColor]; [knapp addTarget: self action: @selector (showActionSheet :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: button];
Ved å gjøre den forrige metoden, showActionSheet:
, Målet for knappen, denne metoden vil bli kalt når knappen er tappet. Nå som vi har en knapp for å vise handlingsarket, la oss fortsette å lage logikken for å hente opp handlingsarket når du trykker på knappen.
Før vi kan ringe noen av UIActionSheetDelegate
metoder, vi må være i overensstemmelse med UIActionSheetDelegate
protokoll. Klikk på "ViewController.h" -filen og oppdater grensesnittdeklarasjonen til følgende kode.
@interface ViewController: UIViewController
Ved å overholde UIActionSheetDelegate
protokoll, den ViewController
klassen kan implementere og utføre nødvendige oppgaver når visse delegerte metoder kalles.
Fortsatt i "ViewController.m" -filen, legg til følgende UIActionSheetDelegate
metode.
- (void) actionSheet: (UIActionSheet *) actionSheet klikketButtonAtIndex: (NSInteger) buttonIndex
Det er mange UIActionSheetDelegate
metoder, men vi skal bare bruke en: actionSheet: clickedButtonAtIndex:
. Dette er en av de mest implementerte delegeringsmetodene, da den automatisk kalles når en av knappene på handlingsarket er tappet.
Se etter showActionSheet:
metodedefinisjon som vi la til tidligere. Legg til følgende kode i de krøllete båndene for å lage et handlingsark med fem knapper.
NSString * actionSheetTitle = @ "Action Sheet Demo"; // Handlingsblad Tittel NSString * destructiveTitle = @ "Destructive Button"; // Handlingsblad Knapptitler NSString * other1 = @ "Other Button 1"; NSString * other2 = @ "Other Button 2"; NSString * other3 = @ "Other Button 3"; NSString * cancelTitle = @ "Cancel Button"; UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle: actionSheetTitle delegate: self cancelButtonTitle: cancelTitle destructiveButtonTitle: destructiveTitle otherButtonTitles: other1, other2, other3, null]; [actionSheet showInView: self.view];
Som navnet antyder, presenterer et handlingsbilde brukeren forskjellige valg og tilsvarende handlinger som kan utføres. I første del av metoden lager vi seks strenger, en som representerer tittelen på handlingsarket og fem som representerer titler på knappene i handlingsarket. Neste del instanser et handlingsark med bestemte parametere. Disse parameterne inkluderer en tittel for handlingsarket, objektet som vil være delegat (i dette tilfellet selv-
, de UIViewController
objekt), og de forskjellige knappene som skal vises i handlingsarket.
Det finnes tre hovedtyper av knapper som brukes i et handlingsbilde. De cancelButtonTitle:
kansellerer handlingsarket helt. De destructiveButtonTitle:
ødelegger eller sletter noe Denne knappen er som standard rød i handlingsarket. De otherButtonTitles:
kan være noe, og tilbyr ofte et alternativ som å navigere til en ny viewController
. For å slippe ut en av knappene, pass bare inn i null som argumentet for den aktuelle knappens tittel. Den siste delen av metoden, showInView:
, viser handlingsarket i den angitte visningen.
Naviger tilbake til delegatemetoden actionSheet: clickedButtonAtIndex:
. Legg til følgende kode for å bestemme hvilken knapp som ble trykket:
// Få navnet på gjeldende trykknapp NSString * buttonTitle = [actionSheet buttonTitleAtIndex: buttonIndex]; hvis ([buttonTitle isEqualToString: @ "Destructive Button"]) NSLog (@ "Destructive pressed -> Delete Something"); hvis ([buttonTitle isEqualToString: @ "Other Button 1"]) NSLog (@ "Other 1 pressed"); hvis ([buttonTitle isEqualToString: @ "Other Button 2"]) NSLog (@ "Other 2 pressed"); hvis ([buttonTitle isEqualToString: @ "Other Button 3"]) NSLog (@ "Other 3 pressed"); hvis ([buttonTitle isEqualToString: @ "Cancel Button"]) NSLog (@ "Cancel pressed -> Cancel ActionSheet");
Når en knapp trykkes, actionSheet: clickedButtonAtIndex:
er kalt. Vi får navnet på knappen som trykkes, og sammenligner den med de forskjellige knappene i handlingsarket for å bestemme hvilken knapp som ble trykket. De NSLog
med hver hvis setningen logger hvilken knapp som ble trykket på konsollen.
Klikk Produkt> Kjør å bygge og kjøre prosjektet i simulatoren. Klikk "Vis handlingsark" for å hente opp handlingsarket. Åpne konsollen ved å klikke Vis> Feilsøkingsområde> Aktiver konsoll i Xcode. Klikk på en av handlingarknappene for å se den tilhørende loggen i konsollen.
UIActionSheet
brukes ofte til å tilby en bruker mange alternativer. Eksperimentere med UIActionSheet
vil tillate deg å finne konfigurasjonen som fungerer for applikasjonens behov. Spørsmål eller kommentarer? Du er velkommen til å forlate dem i kommentarfeltet eller sende dem direkte via Twitter @aaron_crabtree.