iOS使用相同的xib用于多个ViewControllers

时间:2015-01-23 04:00:20

标签: ios inheritance uiviewcontroller xib

我正在创建一个应用并开始遇到一个问题,即我的应用的规模变得越来越大,我正在寻找可以减小尺寸的方法。我有50多个xib,所以我认为这是我可以改进的领域之一。我有很多xib都匹配到不同的View Controller eacbh,其中一些非常相似。

我希望能够使用这些类似的ViewControllers,并为所有这些使用一个xib来减小尺寸。

我认为继承将是最好的方法。创建一个" SuperViewController"我所有其他ViewControllers都扩展了。 SuperViewController将连接到xib,然后我可以重用我需要的东西。

这里是我在SuperViewController.m中的内容:

 @property (weak, nonatomic) IBOutlet UITableView *tableView;
 @property (weak, nonatomic) IBOutlet UIView *emptyView;
 @property (weak, nonatomic) IBOutlet UIButton *currentButton;
 @property (weak, nonatomic) IBOutlet UIButton *quitWalkButton;

所有这些IBOutlet都在我的xib文件中,并且在我的所有ViewControllers中。每个ViewController只会与那些稍微不同。

问题是,因为它们在我的.m文件中,它们本质上是私有的,我无法从子类访问它们。我可以将它们放在.h文件中并且能够访问它们,但我不希望它们公开我想要它们并且#34;受保护"。另外,我不确定点击等操作是如何工作的,因为它们总是在.m文件中。

我开始认为继承不是在多个View控制器中重用xib文件的方法,但我不确定接受这种方式的方法是什么。无论如何,任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

在我看过的应用程序中,空间的大消费者是媒体,而不是XIB数据。大图像,视频,音频等非常快速占用空间。

如果某些内容实际上消耗了XIB中的空间,通过查看文件中的XML而不是查看Xcode的可视化编辑器,可能更容易找到它。您可能会发现大块二进制数据。

答案 1 :(得分:1)

我将这些出口放在它们位于超类的.m文件顶部的位置,并在单独的标头/扩展中为每个出口放置第二个访问器。

   //myViewControllerSuperclass+privateOutlets
     # import "myViewControllerSuperclass"
     @interface myViewControllerSuperclass(privateOutlets)

    //this header to be imported to your subclasses
     @property (readonly) UITableView *tableView_;
     @property (readonly) UIView *emptyView_;
     @property (readonly) UIButton *currentButton_;
     @property (readonly) UIButton *quitWalkButton_;
    //note trailing underscore..



//myViewControllerSuperclass.m
# import "myViewControllerSuperclass+privateOutlets"
@implementation myViewControllerSuperclass

#pragma mark - privateOutlets
-(UITableView *)tableView_{
return self.tableView;
}
-(UIView *)emptyView_{
return self.emptyView;
}
-(UIButton *)currentButton_{
return self.currentButton;
}
-(UIButton *)quitWalkButton_{
return self.quitWalkButton;
}
//these 'getters' just point to the existing outlets..