我开发了一些应用程序'到现在为止。现在我正在写一个新的,在这个项目中我想保持代码非常干净,所以很容易找到方法。
我想从 UIViewControllers 开始,其视图将 UITableView 作为子视图。我希望有一个名为DetailViewController
的文件,用于直接属于它的所有函数。另一个名为DetailViewController+Protocols
的文件应包含上述类的类别以及 UITableView 的所有这些委托方法。
有可能做这样的事吗?我想保持我的代码干净并将其拆分为多个文件。
修改
DetailViewController.h
@interface DetailViewController : UIViewController
... Some Properties
... Some Methods
@end
DetailViewController.m
#import "DetailViewController.h"
@implementation DetailViewController
... Some Synthesizes
... Some Methods
@end
DetailViewController + Protocols.h
@interface DetailViewController (Protocols) <UITableViewDelegate, UITableViewDataSource>
@end
DetailViewController + Protocols.m
@implementation DetailViewController (Protocols)
- (NSINteger)numberOfSections
{
return ...;
}
- (NSInteger)numberOfRowsInSection:(NSInteger)section
{
if (section == 0)
return ...;
return ...;
}
...
@end
然后Xcode显示一些警告,一些委托方法没有在DetailViewController中实现。我还尝试在 DetailViewController.h 中导入 DetailViewController + Protocols.h 。没有变化。
然后我试着忽略警告并看到:它有效!但为什么?如果没有这些警告,它不应该有效吗?
答案 0 :(得分:9)
如果您只针对一个类使用它,则不必在另一个文件中创建完全独立的命名协议。事实上,你可能不应该因为它只是令人困惑。
如果你想保持你的主要班级.h文件干净,只需移动它:
@interface DetailViewController (Protocols) <UITableViewDelegate, UITableViewDataSource>
@end
进入@implementation
上方的主.m文件我不明白为什么你不想在你的.h中声明你的主类实现了tableview委托和数据源协议。它们是描述性的。
答案 1 :(得分:5)
是的。关注类别唯一要记住的是,您不能在其中@synthesize
属性。在类别中添加ivars也更加困难。
有关详情,请参阅this。