在Interface Builder中使用id <protocol>作为文件所有者?

tha*_*ger 9 objective-c interface-builder ios

我有一个自定义UITableViewCell,我正在使用nib实例化instantiateWithOwner:(id)owner options:(NSDictionary *)options.当实例化nib时,我将其保存到我的视图控制器中定义的IBOutlet,该控制器在.xib文件中设置为文件的所有者.一切都很好.

我现在遇到了在多个视图控制器中使用此自定义单元的需要.我希望我可以定义一个协议(例如CustomCellOwner),多个视图控制器可以实现.该协议将简单地定义用于在实例化时引用该单元的IBOutlet.

理想情况下,我想将"文件所有者"设置为:

id <CustomCellOwner>
Run Code Online (Sandbox Code Playgroud)

在Interface Builder中.

但是,Interface Builder似乎只允许您将文件所有者设置为已知类,而不是实现协议的id?

有没有办法做到这一点?或者,一种更简单的方法来解决这个问题?

谢谢!

NJo*_*nes 3

这不是您要求的解决方案,但您可以UIViewController为需要使用笔尖的每个视图控制器创建一个子类。就像是:

@interface CustomCellOwnerViewController : UIViewController
@property (nonatomic, strong) IBOutlet UIButton *someButton;
-(IBAction)doSomething;
@end
Run Code Online (Sandbox Code Playgroud)

然后使用它作为每个的基类:

@interface FirstView : CustomCellOwnerViewController
Run Code Online (Sandbox Code Playgroud)

然后你就可以简单地设置File's OwnerCustomCellOwnerViewController没有问题。

只是一个想法。