0

我创建了一个自定义小部件作为一个XIB文件,其中有多个UITableViews 和一个UIButton. 在作为此 XIB 所有者的相应 swift 文件中,我有这些 TableView 的出口。

我已将此小部件添加到UIViewController. 现在在这个控制器的相应 swift 文件中,我需要为每个表视图分配dataSourcedelegate,并为按钮分配一个动作。

我在网上找了很久,似乎@IBInspectable vars 是要走的路,但似乎我无法制作 var which of typeUITableView或as 。UITableViewDelegateUITableViewDatasource@IBInspectable

那么如何使用表格视图和按钮呢?谁能指导我找到正确的文档、示例或解释?

4

1 回答 1

1

无需使用@IBInspectable. 您可以有条件地在方法中简单地使用每个表源UITableViewDelegate。这是执行此操作的一种方法:

首先在你的故事板中UITableViewController,添加一个原型单元格,然后在该原型单元格中添加一个UITableView带有它自己的原型单元格的单元格。

然后设置内部和外部表视图单元格的重用标识符,如下所示:

外部表格视图单元格: 外部表视图单元重用标识符

内部表格视图单元格: 内表视图单元重用标识符

然后将内部 tableview 的数据源和委托链接到UITableViewController自己的数据源和委托:

链接数据源和委托 #1 链接数据源和委托#2

然后在您的UITableViewController班级中,您可以有条件地设置表格的元素,例如:

- (void)viewDidLoad {
    [super viewDidLoad];
    dataSource1 = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", nil];
    dataSource2 = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == self.tableView) {
        return 80;
    } else {
        return 20;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    if (tableView == self.tableView) {
        return dataSource1.count;
    } else {
        return dataSource2.count;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell;

    if (tableView == self.tableView) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier" forIndexPath:indexPath];
    } else {
        cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier2" forIndexPath:indexPath];
    }

    // Configure the cell...
    if (tableView == self.tableView) {
        cell.textLabel.text = [dataSource1 objectAtIndex:indexPath.row];
    } else {
        cell.textLabel.text = [dataSource2 objectAtIndex:indexPath.row];
        cell.backgroundColor = [UIColor blueColor];
    }
    cell.textLabel.backgroundColor = [UIColor clearColor];

    return cell;
}

在这种情况下会产生以下结果: 最后结果

于 2015-02-14T07:32:33.050 回答