titlu autor categorie extras stari revizuiri

UISplitViewController

Natasha Murashev

Cacao

Desi limbajele de interfata cu utilizatorul au facut loc conceptului mai larg de clase de dimensiuni, „UISplitViewController” ramane un API cal de lucru pentru scrierea aplicatiilor universale.

03.11.2014 26.09.2018

Publicatie originala

Actualizat pentru iOS 12 si Swift 4.2

rapid revizuit

4.2

26 septembrie 2018

La inceput, a existat iPhone-ul. Si a fost bine.

Cativa ani mai tarziu, iPad-ul a fost introdus. Si cu unele adaptari, o aplicatie iOS ar putea fi facuta Universal pentru a gazdui atat iPhone, cat si iPad intr-un singur pachet.

Pentru o vreme, impartirea dintre cele doua a fost impartirea in sine — si anume UISplitViewController. Avand in vedere o paradigma clasica a controlerului de vizualizare detaliu, un iPhone ar afisa fiecare pe ecrane separate, in timp ce un iPad ar afisa ambele unul langa altul.

Dar, in timp, iPhone-ul a crescut ca dimensiune si distinctia dintre telefon si tableta a inceput sa se estompeze. Incepand cu iPhone 6+, aplicatiile care ruleaza in modul peisaj pe telefon aveau suficient imobil pe ecran pentru a actiona ca si cum ar fi pe o tableta.

Desi limbajele de interfata cu utilizatorul au facut loc conceptului mai larg de clase de dimensiuni, UISplitViewController ramane un API cal de lucru pentru scrierea aplicatiilor universale. Saptamana aceasta, sa aruncam o privire mai atenta asupra modului in care il putem folosi pentru a ne adapta interfata de utilizare la o varietate de dimensiuni de ecran.

Sa incepem cu un exemplu de UISplitViewController care isi lucreaza magia pe un iPhone mare:

Cu toate acestea, vizualizarea nu se imparte cand iPhone-ul este in modul Afisare marita .

{% info face%}

Puteti comuta intre modul de afisare standard si modul de afisare marit in Setari accesand General → Accesibilitate → Zoom, activand optiunea Zoom si selectand Zoom pe ecran complet pentru regiunea Zoom.

{% endinfo%}

Acesta este un exemplu al modului in care vizualizarile impartite determina automat momentul in care trebuie afisate vizualizarile impartite.

Controler Split View, de la inceput la final

Cel mai bun mod de a intelege cum se foloseste UISplitViewController functioneaza prin a arata un exemplu complet. Codul sursa pentru exemplul de proiect din aceasta postare poate fi gasit aici.

Aspectul Storyboard

Iata o prezentare generala a aspectului aspectului unui storyboard cu un controler de vizualizare divizata:

{% asset uisplitviewcontroller-storyboard-layout.png alt = “UISplitViewController Storyboard Layout”%}

Pentru a stapani acest concept, sa ne aruncam in detalii .

Maestru / Detaliu

Primul pas pentru utilizarea unui UISplitViewController este sa il trageti pe storyboard. Urmatorul pas este sa specificati care controler de vizualizare este master si care este detaliul.

{% asset uisplitviewcontroller-master-detail-storyboard.png alt = “UISplitViewController Master-Detail Storyboard”%}

Puteti face acest lucru selectand Segmentul de relatii adecvat:

{% asset uisplitviewcontroller-relation-segue.png alt = “UISplitViewController Relationship Segue”%}

Controlerul de vizualizare master este de obicei controlerul de navigatie care contine vizualizarea lista (un UITableView in majoritatea cazurilor); controlerul de vizualizare detaliu este controlerul de navigatie care contine vizualizarea care apare atunci cand utilizatorul atinge elementul din lista.

Arata detalii

Exista o ultima parte pentru a face ca controlerul de vizualizare divizata sa functioneze: specificarea sectiunii „Arata detaliile”.

{% asset uisplitviewcontroller-show-detail-segue.png alt = “UISplitViewController Show Detail Segue”%}

In exemplul de mai jos, cand utilizatorul atinge o celula din ColorsViewController, li se afiseaza un controler de navigare cu ColorViewController la radacina.

viendo como se follan a mi mujer sin bragas en la calle
zofilia porno rspañol
videos de zofilia incestos gays
española follando videos de lucio saints
incestos lesbicos recopilacion pajas
mujer masturbandose venezolanas desnudas
mujeres normales desnudas española viciosa
tetona amateur forzadas a follar
peliculas porno gay españolas jovencitas pilladas masturbandose
sexo maduras españolas madre española follando con su hijo
porno obligado shemalehd
porno maduras en español vidio pirno
super tetudas maduras lesbianas tetonas
mamada a dos bocas abuela enculada
triple anal pareja follando en la playa
xxx gratis en español xxxgay
swingers españoles incestos jovencitas
follando en casa mujeres fornicando
porno amateur hd bbw abuelas
abuelas porno españolas madres que se follan a sus hijos

Controlere de navigare duble‽

In acest moment, s-ar putea sa va intrebati: De ce controlerele de vizualizare master si de detaliu trebuie sa fie controlere de navigatie — mai ales cand exista deja un „Afisare detaliu”? .

Ei bine, sa vedem ce se intampla atunci cand controlerul de vizualizare detaliu nu are un controler de navigatie la radacina:

{% asset uisplitviewcontroller-no-detail-navigation-controller.png alt = “UISplitViewController Fara controler de navigare detaliu”%}

Din toate punctele de vedere, aplicatia ar functiona in continuare foarte bine. Pe un iPhone mare, singura diferenta este lipsa unei bare de navigare atunci cand telefonul este in modul peisaj:

{% asset uisplitviewcontroller-no-navigation-bar.png alt = “UISplitViewController Fara bara de navigare”%})

Nu este mare lucru decat daca doriti ca bara de navigare sa afiseze un titlu. Dar acesta este un break-break pentru un iPad:

Observati ca, atunci cand aplicatia iPad se lanseaza pentru prima data, nu exista niciun indiciu ca exista deloc un controler de vizualizare divizata! Pentru a declansa controlerul de vizualizare master, utilizatorul trebuie sa stie in mod magic sa gliseze de la stanga la dreapta.

Adaugarea unui buton Display Mode

Pentru a rezolva aceasta problema, cautam o modalitate de a indica faptul ca aplicatia are mai multe decat ceea ce este in prezent pe ecran. Din fericire, UISplitViewController are un element de navigare displayModeButtonItem, care poate fi adaugat la bara de navigare pentru a ne oferi indicatorul vizual pe care il cautam:

suprascrie func viewDidLoad () {super.viewDidLoad () <# … #> navigationItem.leftBarButtonItem = splitViewController? .displayModeButtonItem navigationItem.leftItemsSupplementBackButton = true}
– (nul) viewDidLoad {[super viewDidLoad]; <# … #> self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem; self.navigationItem.leftItemsSupplementBackButton = DA; }

Construiti si rulati din nou pe iPad si acum veti obtine o indicatie placuta despre modul in care accesati restul aplicatiei:

Proprietatea displayModeButtonItem ofera o oarecare utilizare usoara si aplicatiilor care ruleaza pe iPhone-uri mari in modul peisaj:

Utilizand displayModeButtonItem, lasati iOS sa-si dea seama ce este potrivit pentru dimensiunea si orientarea curenta a ecranului. In loc sa transpiri singur lucrurile mici (si mari), poti sa te asezi si sa te relaxezi. ????

Reduceti controlerul de vizualizare detaliu

Mai putem face o optimizare pentru iPhone. Cand utilizatorul lanseaza prima data aplicatia, sa afisam controlerul de vizualizare principala pana cand utilizatorul selecteaza un element din lista. Putem face acest lucru folosind UISplitViewControllerDelegate:

clasa ColorsViewController: UITableViewController {var collapseDetailViewController: Bool = true <# … #> // MARK: – UITableViewDelegate override func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {self.collapseDetailView} ; UINavigationController, lasati controller = navigationController.topViewController ca? ColorsViewController else {return true} return controller.collapseDetailViewController}}
// SelectColorTableViewController.h @interface SelectColorTableViewController: UITableViewController <UISplitViewControllerDelegate> @end // SelectColorTableViewController.m @interface SelectColorTableViewController () @property (nonatomic) BOOL shouldCollapseDetail; @end @implementation SelectColorTableViewController – (void) viewDidLoad {[super viewDidLoad]; self.shouldCollapseDetailViewController = DA; self.splitViewController.delegate = sine; } #pragma mark – UITableViewDelegate – (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath {self.shouldCollapseDetailViewController = NO; } #pragma mark – UISplitViewControllerDelegate – (BOOL) splitViewController: (UISplitViewController *) splitViewController collapseSecondaryViewController: (UIViewController *) secondaryViewController onPrimaryViewController: (UIViewController *) primaryViewController {return self.shouldCollapseDetailViewController; } @Sfarsit

Acum, cand aplicatia se lanseaza pe un iPhone in orientare portret, ColorsViewController este in vizualizare completa. Odata ce utilizatorul selecteaza o culoare (sau aplicatia intra in fundal), ColorsViewController este redus din nou si se afiseaza ColorViewController:

iOS se adapteaza intotdeauna la noile capabilitati de la hardware nou. Cand au fost introduse ecranele retinei, dezvoltatorii nu mai puteau presupune ca 1pt = 1px. Cand au fost introduse iPhone-uri mai mari, dezvoltatorii nu mai puteau asuma o singura dimensiune a ecranului.

Astazi, suntem responsabili pentru gazduirea mai multor generatii sau iPhone-uri si iPad-uri, precum si afisaje externe si diverse caracteristici de accesibilitate. Acesta ar fi un cosmar daca nu ar fi API-urile puternice si grijulii furnizate in iOS.

Este posibil ca UISplitViewController sa nu fie cel mai nou API din bloc atunci cand vine vorba de adaptarea la diferite conditii de interfata, dar ramane un instrument util pentru crearea rapida a aplicatiilor robuste.