• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

8. Usare UISegmentedControl, UIToolbar, UIBarButtonItem e UIPasteboard nelle applicazioni iOS

By Costantino Pistagna | on 29 Novembre 2011 | 1 commento
Guida rapida alla programmazione Cocoa Touch

L’utilizzo di UINavigationController ed i relativi metodi di inserimento nello stack (pushViewController) potrebbero non risultare comodi per lo switch di viste all’interno di un’applicazione.

L’applicazione della lezione precedente, ad esempio, sebbene utilizzi due viste (una per ogni funzionalita’) non trae giovamento dalla navigazione gerarchica offerta da UINavigationController. L’usabilita’, inoltre, ne risulta seriamente compromessa.

Per applicazioni in cui lo switch tra view e’ inteso piu’ come un cambio di contesto (switchcontext) che come una navigazione gerarchica, e’ possibile usare il concetto di multiplexing accennato nella lezione precedente.

Per switchare agevolmente la view presentata a schermo, e’ sufficiente aggiornare la property view. A titolo di esempio, proveremo ad utilizzare un nuovo oggetto: UISegmentedControl, come switcher tra le varie viste (funzionalita’) della nostra applicazione.

Layout della nostra applicazione

Visto che i controllori di vista dell’esempio precedente erano usati esclusivamente per l’inizializzazione e visualizzazione a schermo delle view (loadView), proveremo a raggruppare i due viewControllers in un’unica classe UIViewController in grado di scegliere e selezionare in maniera opportuna la view (funzionalita’) da mostrare a schermo.


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-01

Creiamo una nuova classe di tipo UIViewController ed indichiamo nella dichiarazione di interfaccia gli oggetti e le classi che interverranno nell’implementazione:


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-02

Oltre alle dichiarazioni per gli oggetti CalculatorView ed CurrencyConverterView, intervengono due nuove dichiarazioni di oggetti: UISegmentedControl ed UIToolBar.

UISegmentedControl

Un tipico controllo che si trova spesso nelle applicazioni iPhone e’ UISegmentedControl.


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-03

L’idea e’ quella di combinare una serie di pulsanti in un oggetto unico, che ne implementi la selezione esclusiva di uno di essi. UISegmentedContol e’ utile in tutte le situazioni in cui bisogna scegliere tra una serie di dati simili concettualmente tra loro. Una tipica istanza della classe UISegmentedControl, potrebbe essere qualcosa del tipo:


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-04

Una volta istanziato il controllo, esso puo’ essere mostrato a schermo assegnandolo alla property navigationItem.titleView del nostro viewController. Questa operazione sostituisce il testo, mostrato come titolo della navigation bar, con una view complessa (UISegmentedControl, eredita anch’esso da UIView).

Ovviamente, e’ possibile assegnare alla property titleView qualunque oggetto che eredita da UIView. In questo modo e’ possibile sostituire il normale comportamento della barra di titolo della UINavigationBar secondo i nostri scopi.

self.navigationItem.titleView = segmentedControl; 

Per aggiornare la nostra property self.view, quando l’utente sceglie un’opzione dal SegmentedControl, usiamo il metodo addTarget:


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-05

Quando l’utente seleziona un’opzione (UIControlEventValueChanged) viene invocato il selettore segmetedControlPressed:. Questo metodo si preoccupera’ di switchare la view corrente con una di quelle che abbiamo precedentemente istanziato nel metodo loadView.


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-06

La property selectedSegmentIndex viene riempita alla pressione del tasto con un indice intero, corrispondente al tasto selezionato. In questo modo sara’ possibile distinguere tra i tasti presenti.

Nota come il metodo riceve un parametro (id)sender. Nella nostra implementazione, facciamo uso della variabile di istanza segmentedControl, ma sarebbe stato possibile effettuare un cast a UISegmentedControl dell’oggetto ricevuto come parametro, selezionando la sua property in maniera analoga.

-(void)segmentedControlPressed:(id)sender { 
   UISegmentedControl *castedSegmentedControl = sender; 
   ... 
   ... 
} 

UIToolbar e UIBarButtonItem

Un altro componente dell’UIKit molto popolare nelle NavigationBar e’ l’oggetto UIToolbar. Le toolbars possono ospitare un insieme variabile di pulsanti. Tra di essi sono presenti anche pulsanti di sistema predefiniti (bookmark, search, etc.). Molte applicazioni fornite con iPhone, fanno uso di questo oggetto per estendere le funzionalita’ della UINavigationBar (Mail, Safari, etc.).

Prima di poter mostrare una toolbar, e’ necessario creare i pulsanti che si intendono mostrare all’utente. Ogni pulsante sara’ aggiunto ad un array, creato attraverso la classe standard Cocoa NSMutableArray.

NSMutableArray *buttons = [[NSMutableArray alloc] init]; 

I tipi di pulsanti piu’ comuni sono quelli rappresentati da immagini o testo. Entrambi i tipo sono creati attraverso la classe UIBarButtonItem. A seconda se vogliamo immagini o testo per le etichette dei nostri pulsanti, useremo dei metodi di inizializzazione diversi.

initWithImage sara’ il metodo da usare nel caso vogliamo assegnare un’immagine al nostro pulsante.
initWithTitle, invece, sara’ il metodo da usare per delle etichette di testo standard.


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-07

Creazione della UIToolbar

Una volta creato l’array con i pulsanti che si intendono mostrare a schermo, dobbiamo allocare un oggetto contenitore UIToolbar. A tale scopo utilizziamo il metodo di inizializzazione initWithFrame:, fornendo il posizionamento e la dimensione desiderata per la nostra UIToolbar.


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-08

Una volta ottenuta la nuova istanza dell’oggetto, configuriamo lo stile desiderato e la sorgente dei pulsanti da visualizzare (l’array generato precedentemente).

Non dimentichiamo di aggiungere la nuova view cosi’ creata alla view principale dello schermo.

L’oggetto UIPasteboard

Restano da implementare i metodi di copia ed incolla che abbiamo aggiunto nella UITabBar. Per fare questo, useremo un oggetto standard dell’UIKit: UIPasteboard.

La classe UIPasteboard ci permette di condividere dati all’interno della stessa applicazione o fra applicazioni diverse, utilizzando una pasteboard generale o specifica. Tipicamente, un oggetto della nostra applicazione scrive dei dati all’interno dell’oggetto pasteboard quando viene richiesta l’azione di copia. Un altro oggetto, quindi, utilizza i dati che si trovano all’interno della pasteboard per effettuare un’operazione di incolla quando viene richiesta l’operazione.

Una pasteboard e’ una regione di memoria condivisa dove e’ possibile accedere in lettura/scrittura. Esisono due pasteboard di sistema: UIPasteboardNameGeneral ed UIPasteboardNameFind. La prima viene utilizzata per le operazioni di copia-incolla che coinvolgono dati generici; la seconda, invece, viene utilizzata in operazioni di ricerca mantenendo la stringa piu’ recente nella search bar.

Inoltre, le applicazioni possono creare la propria pasteboard per i propri usi specifici (scambio di dati all’interno dell’applicazione). Ogni pasteboard deve avere un identificativo univoco. E’ possibile marcare come persistente una pasteboard, in maniera che permanga anche dopo la chiusura e riapertura dell’applicazione. Le pasteboard di sistema sono persistenti di default.

UIPasteboard fornisce tutti i metodi necessari per leggere e scrivere singoli elementi o elementi multipli. I dati scritti o letti possono presentarsi in due forme generali. Se i dati da scrivere sono una property-list (o l’oggetto puo’ essere convertito in property-list), useremo il metodo setValue:forPasteboardType: per inserirlo all’interno della pasteboard.

Se i dati da scrivere sono binari (ad esempio, un’immagine) o non possono essere convertiti in tipo property-list, useremo il metodo setData:forPasteboardType:.

Ricordiamo che le classi convertibili in plist sono: NSString, NSArray, NSDictionary, NSDate, NSNumber and NSURL.


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-09

Restano da implementare due metodi relativi alle classi CalculatorView ed CurrencyConverterView. Questi metodi saranno i responsabili (setter/getter) per il valore mostrato nel display dell’oggetto. A seconda se stiamo visualizzando il convertitore di valuta o la calcolatrice, dovremo distinguere l’oggetto display usato. In ogni caso, i metodi faranno accesso alla property text del relativo oggetto myDisplay.


8-Usare-UISegmentedControl-UIToolbar-UIBarButtonItem-UIPasteboard-in-applicazioni-iOS-10

NOTA: Avremmo potuto implementare i due metodi (setter e getter), attraverso l’uso dei costrutti @property / @synthetize. Come si sarebbe dovuto procedere in questo caso?

Riferimenti

  • iOS Developer Library: UIPasteboard Class Reference
  • iOS Developer Library: UINavigationController Class Reference
  • iOS Developer Library: iOS Application Programming Guide
  • iOS Developer Library: View Programming Guide for iOS
  • iPhone SDK Application Development – Capitolo 3


Strips-iPhone

Share this story:
  • tweet

Tags: cocoa touchNavigationBarUiBarButtonItemuikitUINavigationControllerUIPasteboardUISegmentedControlUIToolbar

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • 11. Objective-C: UITabBarController, UITextField, UIPickerView, UIDatePicker

    7 Marzo 2012 - 0 Comment
  • 9. Objective-C: UITableView (parte 1)

    20 Dicembre 2011 - 4 Comments
  • 7. Creiamo una semplice calcolatrice in XCode e Objective-C (parte 3)

    24 Ottobre 2011 - 1 Comment

Author Description

One Response to “8. Usare UISegmentedControl, UIToolbar, UIBarButtonItem e UIPasteboard nelle applicazioni iOS”

  1. 23 Dicembre 2011

    Alessandro

    Interessante. Complimenti

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO