我正在构建一个由不同视图组成的应用程序,这些视图彼此密切相关。到目前为止,我只有一个UIViewController来控制这些不同的视图。例如,视图1和2共享相同的背景,视图1和2之间的过渡是自定义动画。
我的问题是视图1和2都有一个UIScrollView。我的UIViewController是他们的委托,我可以使用以下scrollViewDidScroll来区分两个scrollviews:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.tag == 1)
//handle a
else if (scrollView.tag == 2)
//handle b
else if (scrollView.tag == 3)
//handle c
}
滚动视图1会发生很多事情,而滚动视图2会发生不同的事情,代码将变得非常混乱。理想情况下,我想在单独的文件中定义滚动滚动等会发生什么。然而,我不想要另一个UIViewController,因为转换变得更加困难。我没有NavBar或ToolBar,所以UINavigationController和UITabBarController在我的情况下都不会很好用。
我该怎么办?
我发布了类似问题here。
答案 0 :(得分:3)
如果您不想要两个视图控制器,只需为每个滚动视图创建一个单独的委托。使其成为符合NSObject
的{{1}},并在滚动视图的同时创建它。
似乎要组合您寻找的结果:一个视图控制器,但封装的滚动视图代码。
答案 1 :(得分:1)
您可以拥有一个处理常用功能的基本控制器类。每个不同的控制器都可以从此继承并根据需要覆盖其特定功能。
修改强>
扩展。你说你只想要一个视图控制器。因此,您应该创建一个单独的类来处理各个功能。 View Controller有一个基类指针,它根据当前视图进行交换。
在伪代码中:
class BaseFunctionality
-(void) handleDidScroll {}
end
class ScrollViewAFunctionality : BaseFunctionality
-(void) handleDidScroll {
// Lots of interesting technical stuff...
}
end
class ScrollViewBFunctionality : BaseFunctionality
-(void) handleDidScroll {
// Lots of interesting technical stuff...
}
end
class TheViewController : UIViewController
BaseFunctionality *functionality;
-(void) swapViews {
// Code to swap views
[this.functionality release];
if (view == A)
this.functionality = [[ScrollViewAFunctionality alloc] init]
else if ( view == B)
this.functionality = [[ScrollViewBFunctionality alloc] init]
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[this.functionality handleDidScroll];
}
end