I den här nybörjarens iOS SDK-handledning kommer vi att gå över hur man implementerar UIActionSheet
och UIActionSheetDelegate
. I den här klassen kan du enkelt uppmana användaren för inmatning genom att visa en lista över menyalternativ.
Starta Xcode och klicka Arkiv> Nytt> Projekt. Klicka på "Program" under IOS-panelen till vänster och klicka sedan på ikonen "Enkel visningsprogram". Klicka på "Nästa".
I fältet "Produktnamn" skriver du "ActionSheetDemo" och anger ett namn för din företagsidentifierare, till exempel "com.mobiletuts." Välj "iPhone" från menyn "Enhetsfamilj". Avmarkera "Använd Storyboards" och "Include Unit Tests" och markera "Use Automatic Reference Counting". Klicka på "Nästa", välj en plats för att spara ditt projekt och klicka på "Skapa".
Först förklarar vi och definierar en metod som kommer att ta fram handlingsbladet. Klicka på "ViewController.m" -filen och lägg till följande metoddeklaration och definition:
@interface ViewController () - (void) showActionSheet: (id) avsändare; // Förklara metod att visa handlingsblad @end @implementation ViewController ... - (void) showActionSheet: (id) avsändare ...
Leta efter viewDidLoad:
metod i samma fil och lägg till följande kod för att skapa en knapp programmerat:
UIButton * knappen = [UIButton buttonWithType: UIButtonTypeRoundedRect]; button.frame = CGRectMake (20,0f, 186,0f, 280,0f, 88,0f); [knappen setTitle: @ "Visa handlingsblad" forState: UIControlStateNormal]; [knapp setTitleColor: [UIColor blackColor] forState: UIControlStateNormal]; button.tintColor = [UIColor darkGrayColor]; [knapp addTarget: self action: @selector (showActionSheet :) forControlEvents: UIControlEventTouchUpInside]; [self.view addSubview: button];
Genom att göra den tidigare metoden, showActionSheet:
, Målet för knappen, denna metod kommer att ringas när knappen trycks in. Nu när vi har en knapp för att visa handlingsbladet, låt oss gå vidare till att skapa logiken för att ta fram handlingsbladet när knappen trycks ned.
Innan vi kan ringa någon av UIActionSheetDelegate
metoder, vi måste överensstämma med UIActionSheetDelegate
protokoll. Klicka på "ViewController.h" -filen och uppdatera gränssnittsdeklarationen till följande kod.
@interface ViewController: UIViewController
Genom att överensstämma med UIActionSheetDelegate
protokollet, ViewController
klassen kan implementera och utföra nödvändiga uppgifter när vissa delegerade metoder kallas.
Fortfarande i filen "ViewController.m", lägg till följande UIActionSheetDelegate
metod.
- (void) actionSheet: (UIActionSheet *) actionSheet clickedButtonAtIndex: (NSInteger) buttonIndex
Det är många UIActionSheetDelegate
metoder, vi kommer dock att använda bara en: actionSheet: clickedButtonAtIndex:
. Det här är en av de vanligaste implementerade delegeringsmetoderna, eftersom den automatiskt kallas när en av knapparna på handlingsbladet tappas.
Leta efter showActionSheet:
metoddefinition som vi lagt till tidigare. Lägg till följande kod inuti de lockiga axlarna för att skapa ett handlingsblad med fem knappar.
NSString * actionSheetTitle = @ "Action Sheet Demo"; // Action Sheet Titel NSString * destructiveTitle = @ "Destructive Button"; // Handlingsblad Knapptitlar NSString * other1 = @ "Annan knapp 1"; NSString * other2 = @ "Annan knapp 2"; NSString * other3 = @ "Annan knapp 3"; NSString * cancelTitle = @ "Avbryt knapp"; UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle: actionSheetTitle delegat: self cancelButtonTitle: cancelTitle destructiveButtonTitle: destructiveTitle otherButtonTitles: other1, other2, other3, nil]; [actionSheet showInView: self.view];
Som namnet antyder presenterar ett handlingsblad användaren med olika val och motsvarande åtgärder som kan utföras. I den första delen av metoden skapar vi sex strängar, en som representerar titeln på handlingsbladet och fem som representerar titlarna på knapparna i handlingsbladet. Nästa del instansierar ett handlingsblad med specifika parametrar. Dessa parametrar inkluderar en titel för handlingsbladet, det objekt som kommer att bli delegat (i det här fallet själv
, de UIViewController
objekt) och de olika knapparna som ska visas i handlingsbladet.
Det finns tre huvudtyper av knappar som används i ett handlingsblad. De cancelButtonTitle:
avbryter åtgärdsbladet helt och hållet. De destructiveButtonTitle:
förstör eller raderar något den här knappen är normalt röd i handlingsbladet. De otherButtonTitles:
kan vara något, och erbjuder ofta ett alternativ som att navigera till en ny viewController
. För att lämna en av knapparna, gå enkelt in i noll som argumentet för den knappens titel. Den sista delen av metoden, showInView:
, visar handlingsbladet i den angivna vyn.
Navigera tillbaka till delegatmetoden actionSheet: clickedButtonAtIndex:
. Lägg till följande kod för att bestämma vilken knapp som trycktes:
// Hämta namnet på den aktuella tryckknappen NSString * buttonTitle = [actionSheet buttonTitleAtIndex: buttonIndex]; om ([buttonTitle isEqualToString: @ "Destructive Button")) NSLog (@ "Destructive pressed -> Delete Something"); om ([buttonTitle isEqualToString: @ "Annan knapp 1"]) NSLog (@ "Övrigt 1 tryckt"); om ([buttonTitle isEqualToString: @ "Other Button 2"]) NSLog (@ "Övrigt 2 tryckt"); om ([buttonTitle isEqualToString: @ "Other Button 3"]) NSLog (@ "Other 3 pressed"); om ([buttonTitle isEqualToString: @ "Cancel Button"]) NSLog (@ "Avbryt tryckt -> Avbryt ActionSheet");
När en knapp trycks in, actionSheet: clickedButtonAtIndex:
kallas. Vi får namnet på knappen som trycks och jämför den med olika knapptitlar i handlingsbladet för att bestämma vilken knapp som tryckts. De NSLog
med varje om uttalande loggar vilken knapp som tryckts på konsolen.
Klick Produkt> Kör att bygga och köra projektet i simulatorn. Klicka på "Visa åtgärdsblad" för att hämta handlingsbladet. Öppna konsolen genom att klicka på Visa> Felsökningsområde> Aktivera konsolen i Xcode. Klicka på en av åtgärdsbladsknapparna för att se motsvarande logg i konsolen.
UIActionSheet
brukar användas för att erbjuda en användare många alternativ. Experimentera med UIActionSheet
kommer att låta dig hitta den konfiguration som fungerar för din applikations behov. Frågor eller kommentarer? Gärna lämna dem i kommentarfältet eller skicka dem direkt via Twitter @aaron_crabtree.