在几个viewControllers之间共享相同代码的正确方法是什么?

时间:2014-07-29 20:05:23

标签: ios objective-c uitableview inheritance

我有几个视图控制器(或者具体来说是tableview控制器),所有这些视图控制器都使用可以在数据访问运行时显示的相同视图(加载视图)。

目前,我在所有这些视图控制器中都有相同的代码:

// Loading the loading view
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"loadingView" owner:nil options:nil];
loadingView = [nibContents lastObject];

[self.view addSubview:loadingView];

我还使用toast视图显示控制器中操作后的成功或错误。

我的问题是,避免代码复制/粘贴的正​​确方法是什么?

我尝试过类别: 似乎无法工作,因为我无法将引用存储到加载视图。

我也尝试过继承,但没有太大的成功(子控制器不能识别父视图控制器的属性(加载视图))。

你能指引我做正确的方法吗? 我将故事板和NIB文件用于特定视图(加载和转发)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

我尝试了类别:似乎没有用,因为我无法将引用存储到加载视图。

查看控制器类别,或者您正在显示的视图上的类方法,是解决此问题的最佳方法。

您可以使用关联对象来保持对正在显示的视图的引用。如果您对这些变量持谨慎态度,可以使用static变量来提供持久存储而无需属性或实例变量。这两个假设您只会一次显示一个加载视图或警报视图,这是预期的。

对于类别,您可以定义类似

的方法

-(void)setLoading:(BOOL)loading

在视图控制器上。这将有一个静态变量,它引用加载视图。如果您传递的是YES,您将创建视图,显示它并将其分配给静态(如果它尚未存在)。如果您传递NO,则删除视图并将静态设置为nil。