我在storyboard中有两个视图控制器A,B
,对于TableViewController元素具有相同的类CustomTableViewController
。
此类中有表的标准委托,如:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
在方法中:
- (void)viewDidLoad {// Load data for A and B controllers }
我如何为两个控制器统治这个类? 例如,如果我打开视图控制器A,则类必须加载数据A,否则加载数据B.
问题是如何在方法viewDidLoad中调用不同的方法:
- (void)viewDidLoad {
if(class A ViewController uses this){
self.response = // Do request
}
if(class b ViewController uses this){
self.response = // Do another request
}
}
答案 0 :(得分:3)
有很多方法可以做到这一点。这是一个。
将可检查属性添加到CustomTableViewController
,如下所示:
@property (nonatomic, copy) IBInspectable NSString *dataSetName;
通过声明IBInspectable
,当你在文档大纲中选择控制器时,你告诉Xcode让你直接在故事板中设置属性:
现在,您可以在“数据集名称”字段中键入“A”或“B”。在viewDidLoad
中,您可以查看它:
- (void)viewDidLoad {
[super viewDidLoad];
if ([self.dataSetName isEqualToString:@"A"]) {
[self loadDataSetA];
} else {
[self loadDataSetB];
}
}
答案 1 :(得分:0)
一个解决方案可以为此类提供自定义init,并具有私有属性来存储控制器,如下所示 -
1.在类中有一个实例变量
@property (strong, nonatomic) UIViewController *controller;
-(instanceType)initWithController:(UIViewController*)controller {
self = [super init];
if(self) {
self.controller = controller;
}
return self;
}
现在进入你的viewDidLoad,只需在加载这样的数据之前检查你的存储属性 -
- (void)viewDidLoad {
if( [self.controller isMemberOfClass:[A class]] ) {
self.response = // Do request
}
else if ([self.controller isMemberOfClass:[B class]]) {
self.response = // Do another request
}
}