在故事板中使用自定义静态表视图单元格XIB

set*_*fri 4 uitableview xib custom-cell uistoryboard

我有一个自定义静态UITableViewCell,我希望看起来与右侧细节单元格完全相同(UILabel在左侧,UILabel右侧),除了我希望右边UILabel是可编辑的UITextField.由于我想在故事板中的多个视图控制器中使用此单元,我决定最好的选择是创建一个MyEditableTableViewCell.xib文件,以及相应的*.h,m文件.我在MyEditableTableViewCell.h中有两个公共属性:

@property (weak, nonatomic) IBOutlet UILabel *textLabel;
@property (weak, nonatomic) IBOutlet UITextField *detailTextField;
Run Code Online (Sandbox Code Playgroud)

这些IBOutlets的连接UILabel,并UITextField在文件的.xib.在我的故事板中,我有一个自定义UITableViewController子类,我将所需的类更改UITableViewCellMyEditableTableViewCell.我的视图控制器中有一个属性:

@property (weak, nonatomic) IBOutlet MyEditableTableViewCell *myCell;

但是,当我运行应用程序时,单元格显示为一个空白单元格.对它运行一些检查,我看到[myCell isKindOfClass:[MyEditableTableViewCell class]]返回true.但是,UITextField似乎永远不会得到实例化.当我试图改变时myCell.detailTextField.text,没有任何反应,myCell.detailTextField似乎是零.

任何帮助,将不胜感激!

rob*_*off 8

你是如何创建实例的MyEditableTableViewCell?我的猜测是你做的[[MyEditableTableViewCell alloc] init]而不是从笔尖加载它们.

您在视图控制器中不需要该属性.您需要使用表格视图注册单元格笔尖-[UITableView registerNib:forCellReuseIdentifier:].在你的viewDidLoad.然后,当您发送dequeueReusableCellWithIdentifier:到表视图时,它将实例化nib,创建一个MyEditableTableViewCell,并将其返回给您.

UPDATE

如果您在故事板中布置静态单元格,则使用xib布置单元格有点困难.最简单的方法就是在故事板中布置单元格的子视图.如果您有一些相同类型的子视图,则可以将子视图复制并粘贴到每个单元格.

如果您真的想使用xib,最简单的方法是构建单元格的视图层次结构,如下所示:

MyEditableTableViewCell (in storyboard)
|
+- cell's content view (created automatically by UIKit)
   |
   +- UIView (top-level view of the xib)
      |
      +- UILabel (textLabel)
      |
      +- UITextField (detailTextField)
Run Code Online (Sandbox Code Playgroud)

因此,您将故事板中的单元格类设置为MyEditableTableViewCell.然后你创建你的xib.您将xib文件的所有者类设置为MyEditableTableViewCell.xib 包含MyEditableTableViewCell.xib的顶级视图只是一个普通UIView视图,包含子视图(标签和文本字段).

-[MyEditableTableViewCell initWithCoder:],这样做后self = [super initWithCoder:aDecoder],实例化XIB,传递self(小区)作为厦门国际银行文件的所有者.单元格可以具有连接到标签的出口和xib中的文本字段.

在实例化xib之后,将xib中的顶级视图添加为子视图self.contentView.如果您正在使用自动布局,请在顶级视图和内容视图之间创建约束.否则,将顶级视图frame设置为内容视图bounds,并将自动调整蒙版设置为UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight.