为什么我在使用自定义“原型tableviewcells”时无法定义IBOutlets

时间:2011-12-12 22:25:14

标签: objective-c ios uitableview uistoryboard iboutlet

我有自己的表格视图单元格,在我的故事板中定义。我还为这个特殊的单元格定义了一个自定义的UITableViewCell类。因此,当我想为我的自定义原型单元格创建一个Outlet时,我得到一个错误,即无法创建Outlet。

由于这是不可能的,我必须做一些丑陋的解决方法,并使用IB中的标签在我的代码中稍后引用各个标签和按钮。

我真的不明白为什么这是不可能的,我想知道是否使用标签和[myCell viewWithTag:]是最好的方式去这里?

3 个答案:

答案 0 :(得分:1)

因为插座是控制器与视图中特定项目之间的一对一连接。在原型单元的情况下,它只是一个单元的描述,可以有任意数量的不同项(即表视图中的行)。控制器如何知道您指的是哪个项目(例如第5行或第500行)?这就是您收到错误消息的原因。

Lucas提供了一种通过标签引用您的连接的方法,该方法非常有效。

答案 1 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentInIB"];

UIImageView *img = (UIImageView*) [cell.contentView viewWithTag:1];
//img.image = ...

//Access you prototype cell here to alter its style, example:
[[cell layer] setCornerRadius:10];
[cell setClipsToBounds:YES];

return cell;}

答案 2 :(得分:0)

我假设您正在使用动态原型 - 在故事板中的tableview的属性检查器中,有一个选项可以选择“静态单元”或“动态原型”。如果选择“静态单元格”,则可以执行您要执行的操作,因为在运行时表格视图中只有一个单元格可用于故事板中的每个单元格。使用此方法,您将只能使用在故事板中创建的单元格,即您将无法选择代码中的单元格数。