XIB - UIView或UIControllerView

时间:2017-05-11 22:01:29

标签: ios swift xcode uiview xib

我是iOS开发的新手。我正在尝试在我的应用程序中实现XIB。我想将此XIB添加为视图的一部分,我希望能够获取/捕获此XIB子视图(按钮,图像等)上发生的点击/点击。

首先,我将XIB的File Owner类设置为UIView子类,但现在我看不到处理从这个子类到我的ViewController的点击/点击。

我应该(并且我被允许)将File Owner类设置为我的ViewController类吗?这是允许的吗?我们应该如何处理在XIB中进行的这些点击/点击?

3 个答案:

答案 0 :(得分:0)

不,您不应将FileOwner设置为ViewController。您应该向ViewController添加手势识别器,并将该gestureRecognizer添加到视图中。

我在Swift中不知道,但在目标c中你会做类似的事情:

\W

答案 1 :(得分:0)

文件所有者是加载笔尖时将识别的实际对象的代理或替身。 [编辑。我应该注意" nib"是接口文件的旧学期。 xib是新奇的名字。实际上,在构建项目时,xib文件会编译为nib文件。请原谅我,如果我有点老了并且可以互换地使用nib / xib] 你可以选择使用你的视图控制器作为"文件的所有者"在你的界面文件中。使用它可能看起来像这样:

class MyViewController : UIViewController {
    @IBOutlet loadedView : UIView!

    func loadMyInterface() {
        // load the nib with myself as the "Files Owner".  If the nib file is set up properly
        // shoudl set the "loadedView" outlet on this object
        Bundle.mainBundle.loadNibNamed("MyLoadedView", owner: self, options: nil)

    }
}

在此代码段中,我有loadedView个插座。创建视图控制器时,这将是nil。然后在执行我的程序的某个时刻,我打电话给loadMyInterface。该例程将要求主包加载接口文件" MyLoadedView"。请注意,正是在这一点上,我告诉系统什么对象"文件的所有者"代表。因为我已将我的视图控制器标识为owner,所以为文件所有者标识的接口文件中的任何出口都将连接到该视图控制器。

此外,您可以在视图控制器类上定义操作,并将这些操作连接到"文件的所有者"在界面构建器中,当加载lib时,它们将被定向到视图控制器。

请注意,这只是因为我在加载nib时将我的视图控制器识别为owner。我可以轻松地设置任何其他对象作为文件的所有者,并指示所有者的出口和操作应该去那里。

答案 2 :(得分:0)

为简单起见,您可以像使用带有按钮和标签出口的viewController,IBAction等一样为Xib创建自定义类。然后,您创建一个遵循的协议,并从您希望显示Xib的目标MainView和ViewController中将该委托设置为该协议。当单击Xib中的按钮时,它将引用协议并在viewController中调用一个函数。

CustomView:

protocol customViewDelegate: class {
func buttonClicked()
}

class CustomView: UIView {
weak var delegate: customViewDelegate?

@IBAction func buttonPressed(_ sender: Any) {
     delegate?.buttonClicked()
}
}

ViewController:

class viewController: UIViewController {
@IBOutlet weak var viewContainer: CustomView!

var customView: CustomView?

override func viewDidLoad() {
customView = CustomView.loadFromNib()
customView.delegate = self
}
func buttonClicked() {
     //Do what you wanted to do when the button inside the Xib was clicked.
}
}
相关问题