2012-02-22 88 views
8

我做了大量的研究UISplitView,并无法找到一种方法来控制分割视图时,主和细节有一个视图发生变化。UISplitViewController委托在一个单身人士

然后我找到了一种方法来管理它是一个代表单例类的代理。

我的问题是,我不知道如果这是正确的路要走。我很关心reusabilitymemory managment。此外,我有一种感觉,它违反了苹果的指导方针,以单身代表。

这是我(和它的实际工作):

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

恕我直言,每一个设计模式,架构,是“好”,如果它符合了“问题”你必须解决(和符合您的个人喜好为代码组织)

  • 什么问题了吗?
  • 为什么你需要这个对象?
  • 请问这个单身人士UISplitViewDelegate是你的 UIApplicationDelegate? (保持简单;-)

进一步讨论=>

如果UIApplicationDelegate是一个烂摊子,而不是创建子对象,我一直在使用最近来组织我的代码方案: 使用类别和类扩展

例子:

如果我的ViewController类处理复杂任务的C​​-颂歌可以分组。
让我们说:

  • 声音
  • 核心数据
  • 位置感知,

我创建一个类为每个这些

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

(与几个@interface @implementation相同的文件,或在不同的文件=>我使用几个文件)

然后与每个类别沿我写一个类扩展属性此特定类别的需求。

0

上次我通过继承UISplitViewController来解决这个问题,并使用作为他自己的代理