0

我有一种感觉,我从高层次上搞砸了我的应用程序的设计。现在,我有一个控制器、应用程序委托、两个 UIView(一个是 Scrollview 的子类)和一个用于控制器的 nib。

在 IB 中,我将文件所有者的类设置为 MusicGridController,然后将 UIView 的类设置为 MusicGridView。因此,这些类的实例由 nib 实例化,对吗?然后,我有一个 UIScrollView,我想在 MusicGridView 之上分层。在应用程序代表中,我这样做了:

@synthesize window;
@synthesize viewController;
@synthesize scrollView;


- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after app launch    
    //[application setStatusBarHidden:YES animated:NO];
    //[window addSubview:viewController.view];


    scrollView.contentSize = CGSizeMake(480, 480);
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.alwaysBounceVertical = NO;
    scrollView.alwaysBounceHorizontal = NO;
//  scrollView.maximumZoomScale = 4.0;
//  scrollView.minimumZoomScale = 0.75;
    scrollView.delegate = self;
//  [viewController.view addSubview:scrollView];
    [window addSubview:scrollView];
    [scrollView addSubview:viewController.view];

    [window makeKeyAndVisible];
} 

所以,我将scrollView子类添加到窗口中,然后将Controller的视图作为scrollView的子视图。

我认为我从根本上搞砸了架构。到目前为止,几乎所有与用户交互的代码都在我的 MusicGridView 中,而控制器实际上什么都不做。

我现在遇到的问题是我需要将触摸事件从 UIScrollview 传递给 MusicGridView 实例,但我不知道如何将它传递给正确的实例。

理想情况下,我认为我应该在 UIScrollView 子类的 init 方法中加载 MusicGridView,然后可能让 UIView 成为 UIScrollView 子类的实例。那行得通吗?

4

1 回答 1

1

我不知道如何从整体上解决你的问题。但我可以告诉你,在你当前的架构下,你并没有遵循 MVC 范式。应用程序委托应该让您的应用程序启动,但您不需要在应用程序委托中添加代码来承担类的内部职责。

不需要属性 scrollView (我不相信)

scrollView 的配置应该由它包含的任何视图的控制器(MusicGridView?)处理。该 scrollView 对象包含什么?

如果滚动视图是 UINavigationController 中的根视图,那么您的 UINavigationController 子类可能应该设置您的滚动视图实例。

更新:

从:

理想情况下,我认为我应该在 UIScrollView 子类的 init 方法中加载 MusicGridView,然后可能让 UIView 成为 UIScrollView 子类的实例。那行得通吗?

我相信你在这里的想法是正确的。我混淆了您的滚动视图/MusicGridView 对象要表示的内容。

于 2009-06-11T20:49:28.820 回答