26

我有一个继承自基类的基视图控制器类UIViewController和一个继承自基类的viewcontroller类。现在我有一个 nib,其文件所有者是继承的类,但我所有的操作和出口都在基类中。甚至可以将 nib 文件中的 action\outlet 连接到基类中的 action\outlet 吗?

4

3 回答 3

33

我将基本上通过示例来解释它:

定义一个基类(我们称之为BaseViewController)并在 .h 文件中为其分配一个UITableViewIBoutlet:

//  BaseViewController.h
@interface BaseViewController : UIViewController    
@property (weak, nonatomic) IBOutlet UITableView *tableView;    
@end

定义两个子类(即FirstChildViewControllerSecondChildViewController):

// FirstChildViewController.h
@interface FirstChildViewController : BaseViewController
@end

// SecondChildViewController.h
@interface SecondChildViewController : BaseViewController
@end

现在要使子类中的一个(或两个)使用基类的 iboutlet,只需将引用出口拖到基类 .h 文件中的属性定义中即可。就是这样!

在此处输入图像描述

是一个完整的项目来说明这一点。

于 2014-03-08T06:40:22.007 回答
7

有两种方法可以做到这一点:

1)

以编程方式进行(即在代码中)

首先在基类中声明您的网点。

然后通过继承类中的代码分配您的网点。

2)

您还可以在您的 XIB 文件中分配您的出口和操作。Xcode 知道从基类继承的出口和动作。

于 2012-04-18T22:22:35.773 回答
7

如果基类在 Swift 框架中,那么有时 Xcode 7 将看不到 outlet,即使基类及其 outlet 是公共的。在这种情况下,解决方法如下:

  1. 在 IB 中将控件设置为使用基类
  2. 连接插座
  3. 在 IB 中将控件设置为使用派生类

IB 将显示“!” 旁边的插座就好像它们丢失了一样,但运行时不会出现错误。

如果有人有更好的解决方法,请告诉我!

于 2015-11-20T19:22:59.617 回答