2012-02-22 4 views
8

Я провел много исследований по UISplitView и не смог найти способ управления разделенным представлением, когда изменяется представление мастера и детали.Делегат UISplitViewController в одноэлементном

Тогда я нашел способ управлять им с помощью одноэлементного класса, который является делегатом.

Моя проблема в том, что я не уверен, что это правильный путь. Меня беспокоят reusability и memory managment. Также у меня такое чувство, что руководство Apple должно делать делегаты в одиночных играх.

Это то, что у меня есть (и это на самом деле работает):

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

Теперь реализация:

Этот код может свободно использовать и модифицировать для всех, кто нашел бы его жизнеспособным в их проект :).

Я новичок в StackOverflow (даже если я скрывался в течение пары месяцев без учетной записи), поэтому каждая критика тепло приветствуется.

ответ

2

ИМХО, каждый шаблон дизайна, архитектуры, является «хорошим», если это соответствует «проблеме», вы должны решить (и приспосабливает свои личные предпочтения для организации коды)

  • В чем проблема?
  • Зачем вам этот объект?
  • Может ли это singleton UISplitViewDelegate быть вашим UIApplicationDelegate? (Keep It Simple ;-)

дальнейшее обсуждение =>

Если вы UIApplicationDelegate беспорядок, а не создавать суб-объект, схему я использую в последнее время организовать мой код: категории использования и расширения классов

Пример:

Если мой класс ViewController обрабатывает сложные задачи которых с ода может быть разделена по группам.
скажем:

  • звук
  • основные данные
  • на расположение,

Я создаю категорию для каждого из этих

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

(в одном файле с несколькими @interface @implementation, или в разных файлах => я использовать несколько файлов)

Тогда вместе с каждой категорией я пишу класс-расширение для свойств это особые потребности категории.

0

Последний раз я решил это путем подкласса UISplitViewController и использовал как его собственный делегат.

Смежные вопросы