ios - 创建 UIViewController 的子类

标签 ios uiviewcontroller subclassing

我有一个关于子类化 UIViewControllers 的基本问题,但似乎无法在这里找到答案。我的应用程序有一个 UINavigationViewController,我计划有多个 View (按顺序)。我的第一个 ViewController 是一个带有 UITableViewDatePickerUIPickerController View 的自定义 ViewController等等

我想对所有后续 View 使用相同的ViewController(我猜是一个子类?)。我想使用我在 Storyboard中构建的相同布局。目前,我的代码布局如下:在 viewDidLoad 中,我从 plist 中读取一个数组,并填充表格和内容的其余部分。

正如您所想象的,我试图避免复制粘贴、重复代码以及同时更改所有 View 的简单方法。

我知道这应该是相当微不足道的,但我不知道我需要做出哪些改变。另外,我应该使用 xib 创建一个 ViewController 吗?有没有办法将我的 CustomViewController 拖到 Xcode 右侧出现的列表中?

最佳答案

我认为您应该创建一个“基本” View Controller 来收集所有重复的方法和属性。它将继承自 UIViewControll,但所有其他 Controller 将从 base 继承。

您可以在 Storyboard中复制粘贴相同的 View 并与基类中的 socket 连接,但是如果您需要更改某些内容,您将会遇到问题。所以我建议您以编程方式创建它(我认为 xibs 已经是一个过去),或者将其替换为另一个小的 View Controller ,然后使用 View Controller 的容器来加载它。 enter image description here

如果您有一些重复但不在每个 Controller 中的内容,您可以在基类中创建自己的选项,如下所示:

typedef NS_OPTIONS(NSUInteger, BaseOptions) {
    BaseOptionsNone          = 0,
    BaseOptionsTableView     = 1 << 0,
    BaseOptionsDatePicker    = 1 << 1,
    BaseOptionsSomethingElse = 1 << 2
};

@interface BaseViewController : UIViewController

@property (nonatomic) BaseOptions options;

@end

@implementation BaseViewController

- (void)setOptions:(BaseOptions)options {
    _options = options;

    if (self.options & BaseOptionsTableView) {
        // add table view
    }
    if (self.options & BaseOptionsSomethingElse) {
        // another staff
    }
}

@end

然后将选项设置到子类中:

@interface CustomViewController : BaseViewController

@end

@implementation CustomViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.options = BaseOptionsTableView | BaseOptionsSomethingElse;
}

@end

玩得开心:)

关于ios - 创建 UIViewController 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30413135/

相关文章:

iphone - 如何将 AVAsset 旋转到纵向模式?

python - 如何将测试方法添加到一组 Django TestCase 派生类中?

swift - 如何在 SKScene 中呈现 View Controller ?

ios uinavigationcontroller 到 uiviewcontroller

objective-c - 在 objective-c 中的两个 View Controller 之间共享对象

matlab - 为什么定义 MATLAB containers.Map 子类方法时输出为 "too many output arguments"?

c++ - 适当保护编辑控件免受 SQL 注入(inject)和无意义字符的影响

ios - 在 XCode 8 中获取 Firebase MobileAssetError 警告

iphone - 将 API 端点作为常量进行管理

ios - 在没有导航 Controller 的 UIViewController 中创建 UIToolbar