除了UITableViewController之外,还有什么方法可以在UIViewController中使用原型单元格吗?

时间:2017-07-26 08:57:33

标签: ios xcode storyboard xib

我将tableView作为UIViewController的子视图,在故事板中,我将原型单元格添加到此场景中。但似乎故事板中的单元格设计不起作用,似乎原型单元只适用于UITableViewController?

这是我的故事板设计,我使用tableView作为ViewController的子视图,并在其中添加两个原型单元格(粉红色和蓝色单元格) enter image description here

这是我的tableView代码:

@implementation SubViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.tableView registerClass:[TableViewCell class] forCellReuseIdentifier:@"TableViewCell"];
    [self.tableView registerClass:[ATableViewCell class] forCellReuseIdentifier:@"ATableViewCell"];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 2;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0)
    {
        TableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"TableViewCell" forIndexPath:indexPath];
        return cell;
    }
    else
    {
        ATableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"ATableViewCell" forIndexPath:indexPath];
        return cell;
    }
}

当我运行我的代码时,我希望会有一个蓝色和粉红色的单元格,但事实上,tableView只会有两个空白单元格(看起来故事板中的设计不起作用) enter image description here

2 个答案:

答案 0 :(得分:1)

如果您使用故事板进行设计,则不需要以下行

[self.tableView registerClass:[TableViewCell class] forCellReuseIdentifier:@"TableViewCell"];
[self.tableView registerClass:[ATableViewCell class] forCellReuseIdentifier:@"ATableViewCell"];

而不是你需要在故事板中设置单元格的标识符,如下图所示

enter image description here

答案 1 :(得分:0)

您想检查一些内容以确保您的表格视图已连线,并且知道在SubViewController类中查找单元格。

  1. 确保UITableView的插座设置为您可以在代码中引用的内容。除非您使用UITableViewController子类,否则self.tableView不会自动连接。
  2. 确保您的表格视图已连接SubViewController类作为其数据源和委托。您可以在代码中执行此操作,也可以在界面构建器中拖动。尝试将此添加到您的viewDidLoad方法:self.tableView.dataSource = self;
  3. 您可能希望将单元格设置为在Interface Builder的检查器面板中使用字符串标识符。然后,在cellForRowAtIndexPath:中,使用该标识符将您的单元格出列,代替按类名注册。
  4. 另外,您也可以将原型单元格与UICollectionView一起使用,但API和故事板设置非常相似,并且适用相同的步骤。