如何为两个控制器使用一个类视图表?

时间:2016-01-15 17:21:13

标签: ios objective-c

我在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
    }
}

2 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点。这是一个。

将可检查属性添加到CustomTableViewController,如下所示:

@property (nonatomic, copy) IBInspectable NSString *dataSetName;

通过声明IBInspectable,当你在文档大纲中选择控制器时,你告诉Xcode让你直接在故事板中设置属性:

storyboard editor

现在,您可以在“数据集名称”字段中键入“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;
 }
  1. 现在进入你的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
       }
    }