2012-02-22 19 views
8

Investigué mucho en UISplitView y no pude encontrar una manera de controlar una vista dividida cuando el maestro y el detalle tienen una vista que cambia.Delegado de UISplitViewController en un singleton

Luego encontré una forma de administrarlo con una clase singleton que es el delegado.

Mi problema es que no estoy seguro si es el camino correcto a seguir. Me preocupan reusability y memory managment. También tengo la sensación de que las directrices de Apple son secundarias para hacer delegados en singletons.

Esto es lo que tengo (y que realmente funciona):

// 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 

Ahora la aplicación:

Este código es libre de utilizar y modificar para todos los que les resultaría viable en su proyecto :).

Soy nuevo en StackOverflow (a pesar de que he acechado durante un par de meses sin una cuenta) por lo que cada crítica es muy bien recibida.

Respuesta

2

en mi humilde opinión, todos los patrones de diseño, arquitectura, es 'buena' si se ajusta el 'problema' que tiene que resolver (y se adapte a sus preferencias personales para la organización del código)

  • ¿Cuál es su problema?
  • ¿Por qué necesita este objeto?
  • ¿Podría este singleton UISplitViewDelegate ser su UIApplicationDelegate? (Keep It Simple ;-)

mayor discusión =>

Si UIApplicationDelegate es un desastre, en lugar de crear sub-objeto, un esquema que he estado usando recientemente para organizar mi código: categorías de uso y extensiones de clase

Ejemplo:

Si mi clase ViewController maneja tareas complejas cuyas c la oda se puede separar en grupos.
digamos:

  • sonido
  • datos básicos
  • reconoce la ubicación,

puedo crear una categoría para cada uno de estos

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

(en el mismo archivo con varios @implementation @interface, o en diferentes archivos => i utilizar varios archivos)

Entonces, junto con cada categoría que escribir una clase de extensión de las propiedades de esta categoría necesidades particulares.

0

La última vez que resolví esto subclasificando el UISplitViewController y lo usé como su propio delegado.

Cuestiones relacionadas