2012-02-22 19 views
8

Ho effettuato molte ricerche su UISplitView e non sono riuscito a trovare un modo per controllare una vista divisa quando il Master e il dettaglio hanno una vista che cambia.UISplitViewController delegato in un singleton

Quindi ho trovato un modo per gestirlo con una classe singleton che è il delegato.

Il mio problema è che non sono sicuro se sia la strada giusta da percorrere. Sono preoccupato per reusability e memory managment. Inoltre ho la sensazione che sia in linea con le linee guida di Apple per rendere i delegati in singleton.

Questo è quello che ho (e che funzioni):

// SharedSplitViewDelegate.h 

/* In the detail view controllers: 

// in the initial detail view controller 
- (void)awakeFromNib 
{ 
[super awakeFromNib]; 
// needs to be here, otherwise if it's booted in portrait the button is not set 
self.splitViewController.delegate = [SharedSplitViewDelegate initSharedSplitViewDelegate]; 
} 

// shared between all detail view controllers 
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
SharedSplitViewDelegate *rotationHandler = [SharedSplitViewDelegate initSharedSplitViewDelegate]; 
[self.toolbar setItems:[rotationHandler processButtonArray:self.toolbar.items] animated:YES]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return YES; 
} 

*/ 

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 

@interface SharedSplitViewDelegate : NSObject <UISplitViewControllerDelegate> 

+ (id)initSharedSplitViewDelegate; // returns the singleton class instance 

- (NSArray *)processButtonArray:(NSArray *)array; // Adds and removes the button from the toolbar array. Returns the modified array. 

@end 

Ora l'attuazione:

Questo codice è libero di utilizzare e modificare per tutti che avrebbe trovato praticabile in il loro progetto :).

Sono nuovo di StackOverflow (anche se sono in agguato per un paio di mesi senza un account), quindi ogni critica è caldamente benvenuta.

risposta

2

IMHO, ogni modello di design, architettura, è 'buono' se va bene il 'problema' devi risolvere (e si adatta alle vostre preferenze personali per l'organizzazione del codice)

  • Qual è il tuo problema?
  • Perché hai bisogno di questo oggetto?
  • Potrebbe questo singleton UISplitViewDelegate essere il tuo UIApplicationDelegate? (Keep it Simple ;-)

ulteriore discussione =>

Se UIApplicationDelegate è un casino, piuttosto che la creazione di sub-oggetto, uno schema che ho usato di recente per organizzare il mio codice: categorie di uso e le estensioni di classe

Esempio:

Se la mia classe ViewController gestisce compiti complessi la cui c l'ode può essere separata in gruppi.
diciamo:

  • suono
  • dati fondamentali
  • location-aware,

ho creare una categoria per ciascuno di questi

  • UIViewController+soundManager
  • UIViewController+dataProvider
  • UIViewController+locationManager.

(nel stesso file con diversi @interface @implementation, o in file diversi => utilizzo vari file)

Poi insieme ad ogni categoria scrivo una classe di estensione per le proprietà di questo particolare esigenze categoria.

0

L'ultima volta ho risolto questo sottoclasse il UISplitViewController e utilizzato come suo delegato.

Problemi correlati