Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios XIB-UIView或UIControllerView_Ios_Swift_Xcode_Uiview_Xib - Fatal编程技术网

Ios XIB-UIView或UIControllerView

Ios XIB-UIView或UIControllerView,ios,swift,xcode,uiview,xib,Ios,Swift,Xcode,Uiview,Xib,我是iOS开发新手。我正在尝试在我的应用程序中实现XIB。我希望将此XIB作为视图的一部分添加,并且我希望能够获取/捕获在此XIB的子视图(按钮、图像等)上发生的单击/点击 起初,我将XIB的文件所有者类设置为UIView子类,但现在我看不到任何方法来处理从这个子类到我的ViewController中的点击/点击 我是否应该(并且允许)将文件所有者类设置为我的ViewController类?允许吗?我们应该如何处理在XIBs中进行的这些点击/点击?不,您不应该将文件所有者设置为ViewContr

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

起初,我将XIB的文件所有者类设置为UIView子类,但现在我看不到任何方法来处理从这个子类到我的ViewController中的点击/点击


我是否应该(并且允许)将文件所有者类设置为我的ViewController类?允许吗?我们应该如何处理在XIBs中进行的这些点击/点击?

不,您不应该将文件所有者设置为ViewController。您应该将手势识别器添加到ViewController,然后将该手势识别器添加到视图

我不知道在Swift中,但在目标c中,您将执行以下操作:


UITapGestureRecognizer*tapGestureRecognizer=[[UITapGestureRecognizer alloc]initwithtargetr:customView操作:@selector(mySelector)]

文件的所有者是实际对象的代理或代理,加载nib时将识别该对象。[ed.我应该注意到,“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
outlet。创建“我的视图控制器”时,这将是
nil
。然后在程序执行的某个时刻,我调用
loadMyInterface
。该例程将要求主包加载接口文件“MyLoadedView”。注意,正是在这一点上,我告诉系统“文件的所有者”代表什么对象。因为我已经将我的视图控制器标识为
所有者
,所以接口文件中标识为文件所有者的任何出口都将连接到该视图控制器

此外,您可以在视图控制器类上定义操作,并将这些操作关联到interface builder中的“文件所有者”,当加载库时,它们将被定向到视图控制器


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

为了简单起见,您可以为Xib创建一个自定义类,就像您使用viewController一样,它有按钮和标签的出口、iAction等。然后创建它遵循的协议,并从要显示Xib的目标MainView和ViewController将代理设置为该协议。单击Xib中的按钮时,它将引用协议并调用viewController中的函数

自定义视图:

protocol customViewDelegate: class {
func buttonClicked()
}

class CustomView: UIView {
weak var delegate: customViewDelegate?

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

class viewController: UIViewController, customViewDelegate {
@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.
}
}