Ios 可以在基本表视图类中注册所有表视图单元格吗?
我认为这不是一个固执己见的问题,而是一个要知道这在iOS中是否是一个好做法的问题 我目前正在项目中的每个Ios 可以在基本表视图类中注册所有表视图单元格吗?,ios,objective-c,swift,Ios,Objective C,Swift,我认为这不是一个固执己见的问题,而是一个要知道这在iOS中是否是一个好做法的问题 我目前正在项目中的每个控制器中注册自定义tableviewcell // MARK: Lifecycle override func viewDidLoad() { super.viewDidLoad() self.tableView.tableHeaderView = UIView() self.tableView.tableFooterView = UIView() sel
控制器中注册自定义tableviewcell
// MARK: Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableHeaderView = UIView()
self.tableView.tableFooterView = UIView()
self.tableView.register(R.nib.customCellXX)
self.tableView.register(R.nib.customCellYY)
// and so on...
self.tableView.estimatedRowHeight = 150.0
self.tableView.rowHeight = UITableViewAutomaticDimension
}
我只是想知道我是否可以创建一个tableView
的子类,在那里注册我所有的自定义tableViewCells
,并将tableView
+tableHeaderView
+tableFooterView
的自动高度。在这种情况下,我减少了控制器中的代码行,避免了冗余
编辑:如果这是一个好的做法,我可以在子类BaseTableView
中将自定义单元格的注册放在哪里?只要调用super.viewDidLoad()
,您就可以在子VC的重写viewDidLoad
方法中注册自定义单元格。也就是说,在iOS中,将VCs子类化通常是一种糟糕的做法
如果使用界面生成器,IBOutlets
会从情节提要
连接到。swift
文件都有识别值,并且可能导致nil
引用崩溃,并导致构建错误
如果您试图在多个VCs
中使用相同的IBOutlets
,如果您试图将任何UI
元素连接到父VC,则必须这样做
如果您希望您的所有VCs都有一些共享签名(即相同的方法或属性),请创建一个自定义协议。如果您希望他们都能访问Interface Builder中相同的UI
元素,请学习使用情节提要
您可以在故事板中创建VC,并在代码中轻松实例化它。您可以在子VC重写的viewDidLoad
方法中调用super.viewDidLoad()
。也就是说,在iOS中,将VCs子类化通常是一种糟糕的做法
如果使用界面生成器,IBOutlets
会从情节提要
连接到。swift
文件都有识别值,并且可能导致nil
引用崩溃,并导致构建错误
如果您试图在多个VCs
中使用相同的IBOutlets
,如果您试图将任何UI
元素连接到父VC,则必须这样做
如果您希望您的所有VCs都有一些共享签名(即相同的方法或属性),请创建一个自定义协议。如果您希望他们都能访问Interface Builder中相同的UI
元素,请学习使用情节提要
您可以在故事板中创建VC,并在代码中轻松实例化它。可以通过以下方式完成:
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
self = [super initWithFrame:frame style:style];
if (self) {
[self registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"reUseIdentifier"];
}
return self;
}
稍后,您可以将其子类化为UITableView,甚至可以在不同的控制器中使用。可以通过以下方式完成:
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
self = [super initWithFrame:frame style:style];
if (self) {
[self registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"reUseIdentifier"];
}
return self;
}
稍后,您可以将其子类化为UITableView,甚至可以在不同的控制器中使用。这可以通过这种方式完成。您可以在该自定义表视图中注册所有单元格。如果您需要一个示例,请告诉我。是的,请参阅编辑后的问题,在我的子类BaseTableView
中,自定义单元格的注册应该放在哪里?在didMoveToWindow()
中,这可以通过这种方式完成。您可以在该自定义表视图中注册所有单元格。如果您需要一个示例,请告诉我。是的,请参阅编辑后的问题,在我的子类BaseTableView
中,自定义单元格的注册应该放在哪里?在didMoveToWindow()
?哇,我不知道在iOS中使用BaseViewController
是一种糟糕的做法。我有这样一个类来设置viewController
的默认配置,比如删除导航标题,将状态栏设置为默认,等等。。。我当然知道如何使用故事板。在UITableView
中没有viewDidLoad()
。我已经看过好几次了,它有很多用途,但是Swift中重用行为的一般规则是:如果你能用协议来做,就用协议来做。重用的UI元素并不能很好地用于继承。如果您想重用同一个自定义UIView,可以使用.xib和/或自定义类,并将其添加到多个VCs中,而不会带来太多麻烦或内存使用过多。另外,很抱歉,这一点不明确。在Swift中何时使用继承是一个复杂的问题。如果你想要一个相对复杂的项目的例子,它有共享的行为但很少继承,我可以提供一个链接到我正在为朋友构建的应用程序。好的,现在,我在一个故事板中有多个viewControllers
。一些viewcontroller
中包含tableview
。分配给这些表视图
myBaseTableView
?当然,我很高兴能证实这一点。@dylanthelion我认为这有点不正确。您几乎总是将ViewController子类化,甚至Xcode模板也建议这样做。只要尝试添加一个新的viewcontroller,它总是类似于类MyViewController:UIViewController
。因此,据我所知,子类化(视图控制器)在Cocoa(Touch)中非常常见。你对协议所做的是与视图的交互,至少是那些稍微复杂一点的视图。哇,我不知道在iOS中使用BaseViewController
是一种糟糕的做法。我有这样一个类来设置viewController
的默认配置,比如删除导航标题,将状态栏设置为默认,等等。。。我当然知道如何使用故事板。而且在UITableView
中没有viewDidLoad()