iOS 对多个 ViewController 使用相同的 xib

iOS using the same xib for multiple ViewControllers

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

我希望能够采用这些相似的 ViewControllers,并为所有这些重复使用一个 xib 以减少尺寸。

我认为继承是实现此目的的最佳方式。创建我所有其他 ViewController 扩展的 "SuperViewController"。 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 文件中,并且在我所有的 ViewController 中。每个 ViewController 只是做的事情略有不同。

问题是,因为它们在我的 .m 文件中,它们本质上是私有的,我无法从子类访问它们。我可以将它们放在 .h 文件中并能够访问它们,但我不想要它们 public 我想要它们 "protected"。另外,我不确定点击之类的操作是如何工作的,因为它们总是在 .m 文件中。

我开始认为继承不是在多个视图控制器中重用 xib 文件的方法,但我不确定执行此操作的公认方法是什么。任何方式的任何建议都将受到赞赏。

在我见过的应用程序中,space 的大消费者是媒体,而不是 XIB 数据。大图像、视频、音频等很快就会吃掉 space。

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

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

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