Hjem Sosiale medier Slik legger du til en knapp Når visningskontrolleren er erstattet i din iOS-app - dummies

Slik legger du til en knapp Når visningskontrolleren er erstattet i din iOS-app - dummies

Video: Webinarfestivalen 2018 - Opplæringswebinar for bidragsytere 2024

Video: Webinarfestivalen 2018 - Opplæringswebinar for bidragsytere 2024
Anonim

Fordi du kan erstatte visningsregulatoren i din iOS-app med en ny - om enn en fra samme baseklasse - har den nye visningskontrolleren ingen tilgang til knappen den må vise eller popover den må avvise. Heldigvis gir folkene på Apple et perfekt sted å gjøre det.

Når en segue utløses - som du gjør når du klikker på en tabelloppføring - men før den nye kontrolleren skyver visningen på plass, kalles storyboard-kjøretiden den nåværende visningskontrollens metode slik at den kan overføre data til visningskontrolleren som er om å bli vist.

Det betyr at du kan sende knappinformasjonen til den nye visningskontrollen før den blir lansert. Deretter, prepareForSegue: sender:, vil begge tildele knappen som skal brukes i viewDidLoad og også avvise visningskontrollen.

prepareForSegue: sender: er en visningskontrollørmetode som gir beskjed om en kontroller som en segue skal utføres. segue er UIStoryboadSegue-objektet, og det inneholder informasjon om visningskontrollerne som er involvert i segjen.

Selv om standard implementering av denne metoden ikke gjør noe, kan UIViewController-undergrupper overstyre det og sende data til visningskontrolleren som skal vises. Segue-objektet har egenskaper som peker til kildevisningskontrollen og bestemmelsesvisningskontrollen. Segien er det eneste objektet som samtidig kjenner til både kilden og bestemmelsesvisningene.

avsenderen er objektet som forårsaket segue, men du trenger ikke å bruke det her.

Du legger til koden i prepareForSegue: sender: metode for å gjøre DestinationController til UISplitViewController delegere og tilordne popOverButton og masterPopoverController egenskaper.

Du vil også avvise popover når den er til stede, slik at brukeren ikke trenger å røre i visningen for å bli kvitt den.

For å gjøre alt dette, legg til denne koden til MasterViewController. m.

- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender {if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {DetailViewController * currentDetailViewController; hvis [[selv. splitViewController. viewControllers lastObject] isKindOfClass: [UINavigationController class]]) currentDetailViewController = (DetailViewController *) ((UINavigationController *) [selv. splitViewController. viewControllers lastObject]). topViewController; ellers nåværendeDetailViewController = [selv.splitViewController. viewControllers lastObject]; hvis (currentDetailViewController. masterPopover Controller! = null) [currentDetailViewController. masterPopover Controller dismissPopoverAnimated: YES]; DetailViewController * destinasjonDetailViewController; hvis ([segue. destinationViewController isKindOfClass: [UINavigationController class]]) DestinationDetailViewController = (DetailViewController *) ((UINavigationController *) segue. destinationViewController). topViewController; ellers destinasjonDetailViewController = segue. destinationViewController; selv. splitViewController. delegere = destinasjonDetailViewCon troller; destinationDetailViewController. popOverButton = currentDetailViewController. popOverButton; destinationDetailViewController. masterPopoverController = currentDetailViewController. masterPopoverController;}}

Du starter med å finne den nåværende detaljvisningskontrollen fordi den har knappene og popover-egenskapene den nye visningskontrolleren trenger.

Denne koden virker mer komplisert enn den er. Du sjekker først for å se om du kjører på en iPad. Hvis du er, får du den nåværende detaljvisningskontrollen ved å få tilgang til listen over visningskontrollere i splitViewController's viewController array. Heldigvis har UIViewController-klassen en splitViewController-egenskap for å gjøre det enkelt for deg.

Du kontrollerer deretter om en Navigasjonskontroller er i viewControllers-arrayen, og hvis en er der, får du navigasjonskontrollens toppViewController (den nåværende visningskontrolleren); Hvis ikke, bruker du bare kontrolleren i matrisen. (Du vil legge merke til en masse støping skjer her)

hvis ([[selv. SplitViewController. ViewControllers & # x2028; lastObject] 

isKindOfClass: [UINavigationController & # x2028; class]])

currentDetailViewController = (RTDetailViewController *)

(UINavigationController *)

[selv. splitViewController. viewControllers

lastObject]). topViewController; ellers

currentDetailViewController = & # x2028; [selv. splitViewController. viewControllers

lastObject];

Neste, hvis du ser et popover, vil du avvise det. Du kontrollerer for å se om en popover-kontroller (det er derfor du måtte gjøre eiendommen tilgjengelig ved å flytte den til headerfilen.

hvis (currentDetailViewController. MasterPopoverController 

! = Null)

[currentDetailViewController. MasterPopoverController > dismissPopoverAnimated: YES];

Deretter finner du den nye målkontrollen (den ene blir overført til) ved hjelp av logikk som ligner på logikken du brukte for å finne den nåværende detaljvisningskontrollen.

hvis ([segue. destinationViewController < erKindOfClass: [UINavigationController

klasse]]) DestinationDetailViewController = 

(DetailViewController *) ((UINavigationController *)

Segue. DestinationViewController). TopViewController; annet

DestinasjonDetailViewController =

segue. destinationViewController;

Så setter du bare Split View Controller-delegatet til den nye visningskontrollen, slik at den vil få splitViewController: willHideViewController: withBarButtonItem: forPopoverController: en d splitViewController: willShowViewController: invalidatingBarButtonItem: meldinger.

selv. splitViewController. delegere = destinasjonDetailViewController;

Til slutt tilordner du popOverButton og masterPopOverController-egenskapene i den nye visningsregulatoren.

destinationDetailViewController. popOverButton =

currentDetailViewController. popOverButton;

destinationDetailViewController. masterPopoverController = 

currentDetailViewController. masterPopoverController;

Dette avviser bare popover og tildeler egenskapene, men gjør ingenting for å vise knappen. Det blir faktisk gjort i viewDidLoad.

Du kan også angi størrelsen på popover-vinduet ved å tildele en verdi til prefferedContentSize-egenskapen. Du bør være oppmerksom på at den faktiske størrelsen kan bli redusert slik at popover passer på skjermen og at popover ikke overlapper et tastatur når et tastatur presenteres. Du kan se koden som gjør det i MasterViewController 's awakeFromNib metode.

- (void) awakeFromNib {if ([[UIDevice currentDevice]

userInterfaceIdiom] == UIUserInterfaceIdiomPad)

& # x2028; {selv. clearsSelectionOnViewWillAppear = NO; 

selv. PreferredContentSize = CGSizeMake

(320, 0, 600. 0);} [super awakeFromNib];}

Beskjeden awakeFromNib sendes til en gjenstand som har blitt instansert fra storyboardet etter at alle objekter er lastet og initialisert. Når meldingen er sendt, er alle utgangs- og handlingsforbindelser blitt stilt inn.

Hvis du bestemmer deg for å ignorere rådene her og ikke avvise popover-kontrolleren, vil kranene utenfor popover-vinduet føre til at popoveren blir avvist. Du kan imidlertid tillate brukeren å samhandle med angitte visninger og ikke avvise popover, ved bruk av passthroughViews-eiendommen (selv om du ikke vil gjøre det her). Du må da avvise popover selv.

Slik legger du til en knapp Når visningskontrolleren er erstattet i din iOS-app - dummies

Redaktørens valg

Bruk skjermfeltet til å endre QuickBooks 2014 Rapporter - dummies

Bruk skjermfeltet til å endre QuickBooks 2014 Rapporter - dummies

Skjermbildet i QuickBooks Modify Report dialogboksen lar deg kontrollere rapportintervalldatoen, rapportgrunnlaget, kolonnene og en annen formatering. Bokstavene Rapporter datoområde - Datoer, Fra og Til - gjør det samme som Datoer, Fra og Til bokser i Rapportvinduet. Disse boksene lar ...

Bruk skjermfeltet til å modifisere QuickBooks 2013 Rapporter - dummies

Bruk skjermfeltet til å modifisere QuickBooks 2013 Rapporter - dummies

Hvis du klikker Tilpass rapport, QuickBooks viser dialogboksen Endre rapport, som du kan bruke til å tilpasse en rapport. Når du tilpasser en rapport, endrer du rapportens utseende, layout og informasjonen som den oppsummerer. Dialogboksen Endre rapport ser annerledes ut for ulike rapporttyper. Likevel, hvis du ser forbi ...

Bruk fanen Filtre til å modifisere QuickBooks 2014 Rapporter - dummies

Bruk fanen Filtre til å modifisere QuickBooks 2014 Rapporter - dummies

Filtrene kategorien er trolig den mest interessante og en nyttig kategori som er levert av dialogboksen QuickBooks Modify Report. Filtre-fanen lar deg sette opp filtre som du kan bruke til å angi hvilken informasjon som oppsummeres i rapporten. For å bruke Filtrer-fanen velger du først feltet du vil ha ...

Redaktørens valg

Administrere Cloud Computing Resources - dummies

Administrere Cloud Computing Resources - dummies

I teorien bør cloud computing-tjenester ikke være forskjellig fra ressursene i din eget miljø, bortsett fra at de bor eksternt. Ideelt sett har du en komplett visning av cloud computing-ressursene du bruker i dag, eller vil kanskje bruke i fremtiden. I de fleste skymiljøer kan kunden bare få tilgang til ...

Tips for Going Cloud med datanettverkene dine - dummies

Tips for Going Cloud med datanettverkene dine - dummies

Beregning med datanettverket ditt kan være, hva skal du gjøre for å ta nettverket ditt mot skyen? Her er noen anbefalinger: Ikke stole på en dårlig Internett-tilkobling. Først og fremst, før du tar noen av nettverksoperasjonene i skyen, gjør du ...

Nettverkstjenester levert gjennom Cloud Computing - dummies

Nettverkstjenester levert gjennom Cloud Computing - dummies

Tre forskjellige typer nettverkstjenester kan leveres via skyen: applikasjoner , plattformer og tjenester (infrastruktur). I de følgende avsnittene beskrives disse tre typer skyttjenester i større detalj. Programmer i skyen Vanligvis kalt Software as a Service (SaaS), fullt funksjonelle applikasjoner kan leveres via skyen. En av ...

Redaktørens valg

10 Hadoop Ressurser verdt en bokmerke - dummies

10 Hadoop Ressurser verdt en bokmerke - dummies

Følgende er ti fantastiske Hadoop-ressurser som er verdige til å skape en bokmerke i nettleseren din. Disse ressursene hjelper deg med å skape en livslang læringsplan for Hadoop. Sentralnervesystemet: Apache. org Apache Software Foundation (ASF) er det sentrale fellesskapet for open source-programvareprosjekter. Ikke bare et prosjekt kan være et Apache-prosjekt - ...

Data transformasjon i Hadoop - dummies

Data transformasjon i Hadoop - dummies

Ideen om Hadoop-inspirerte ETL motorer har fått mye trekkraft de siste årene. Hadoop er trods alt en fleksibel datalagrings- og behandlingsplattform som kan støtte store mengder data og operasjoner på dataene. Samtidig er det feiltolerant, og det gir mulighet for kapital- og programvarekostnad ...

Datablokker i Hadoop Distributed File System (HDFS) - dummier

Datablokker i Hadoop Distributed File System (HDFS) - dummier

Når du lagrer en fil i HDFS, bryter systemet det ned i et sett med individuelle blokker og lagrer disse blokkene i forskjellige slave noder i Hadoop-klyngen. Dette er en helt vanlig ting å gjøre, da alle filsystemer bryter filer ned i blokker før de lagres til disk. HDFS har ingen ...