Ios 如何通过按自定义视图中的按钮从superview中删除自定义视图?

Ios 如何通过按自定义视图中的按钮从superview中删除自定义视图?,ios,uiview,swift,xib,Ios,Uiview,Swift,Xib,每当在我的iOS应用程序中点击视图控制器表视图的单元格时,我想显示我自己的自定义视图。当用户点击自定义视图中的按钮时,我还必须关闭自定义视图 然而,当用户点击单元格时,我可以显示自定义视图,但我不能通过点击自定义视图内的按钮来关闭自定义视图-它被错误崩溃:发送到实例的未识别选择器… 因此,我想知道什么是将按钮放在自定义视图中并将@IBAction连接到它以取消它的正确方法。以下是我所做的: 在自定义视图的.xib及其.swift文件之间添加@IBAction连接,并从方法内调用self.remo

每当在我的iOS应用程序中点击视图控制器表视图的单元格时,我想显示我自己的自定义视图。当用户点击自定义视图中的按钮时,我还必须关闭自定义视图

然而,当用户点击单元格时,我可以显示自定义视图,但我不能通过点击自定义视图内的按钮来关闭自定义视图-它被错误崩溃:
发送到实例的未识别选择器…

因此,我想知道什么是将按钮放在自定义视图中并将
@IBAction
连接到它以取消它的正确方法。以下是我所做的:

  • 在自定义视图的
    .xib
    及其
    .swift
    文件之间添加
    @IBAction
    连接,并从方法内调用
    self.removeFromSuperview()
    ——这会导致应用程序崩溃,并显示上面的错误消息

  • @IBAction
    连接添加到调用以显示自定义视图(即具有
    UITableView
    的视图控制器)-这无法完成,因为当我尝试创建连接时,Xcode不会对控件拖动行为作出反应

  • 此外,如果我理解正确,我无法将自定义视图的xib添加到序列图像板文件中,因为自定义视图最初不是创建的;它是通过在运行时点击单元格来实例化的

    那么,我如何通过点击按钮来关闭自定义视图呢?我应该在哪里写代码(即在自定义视图的
    .swift
    文件或原始VC的
    .swift
    文件中)

    更新 当我将一个
    @IBOutlet
    连接从自定义视图的xib上的按钮添加到自定义视图的
    .swift
    文件中,并尝试从视图控制器内(
    println(customView.dismissButton)
    )执行
    println()
    时,然后,它也由于以下错误而崩溃:
    此类不符合key dismissButton的键值编码。
    。因此,我最好只添加手势控制器,并对窗口上的任何点击做出反应,以消除自定义视图。。。真恶心

    更新2
    @Caroline在comment部分的zip文件正是我想要做的,但我不想从代码中创建和实例化自定义视图,而是想在xib上创建UI,在xib上的组件和我的代码之间创建一个
    @IBAction
    连接,最后从代码中取消归档以供使用。

    您可以将自定义视图放在视图控制器中,并使用分段加载自定义视图

    这意味着您可以在情节提要中(在其新视图控制器下)拥有自定义视图,并拥有从表视图单元格到新视图控制器的一个序列,以及从新视图控制器到原始视图控制器的一个展开序列

    这是Objective-C教程,但可能有助于了解故事板的概念:

    编辑:

    根据视图实际执行的操作,为UITableViewCell详图显示视图的正常方法是将详图视图放在单独的视图控制器内,并通过segue链接

    我真的不知道为什么你的应用程序会因为你的代码而崩溃——这真的取决于故事板是如何设置的。如果要用代码实现,可以这样做:

    class ViewController: UIViewController {
    
      var greenView = UIView(frame: CGRect(x:100,y:500,width:200,height:200))
      var greenButton = UIButton(frame: CGRectMake(20, 20, 80, 40))
    
      override func viewDidLoad() {
        super.viewDidLoad()
        greenView.backgroundColor = UIColor.greenColor()
        greenView.addSubview(greenButton)
        greenButton.setTitle("Close Me", forState: .Normal)
        greenButton.addTarget(self, action: "hideGreenView", forControlEvents: .TouchUpInside)
      }
    
      func hideGreenView() {
        self.greenView.removeFromSuperview()
      }
    
      @IBAction func greenview(sender: AnyObject) {
        self.view.addSubview(greenView)
      }
    
    }
    
    该代码假定您在故事板上有一个链接到greenview()的按钮,但其其余部分不在故事板上

    当然,您也可以在故事板上创建视图,并将其作为隐藏视图,然后在函数中隐藏或取消隐藏。如果要将视图动画化,可以使用UIView动画


    如果您的UIViewController是UITableViewController,您也可能会遇到问题。在UIViewController中可以有一个UITableView,UIViewController是委托和数据源,但对我来说这似乎是一个“难闻”的代码(当然,这取决于您实际试图实现的目标)。

    您可以将自定义视图放在视图控制器中,并使用分段加载自定义视图

    这意味着您可以在情节提要中(在其新视图控制器下)拥有自定义视图,并拥有从表视图单元格到新视图控制器的一个序列,以及从新视图控制器到原始视图控制器的一个展开序列

    这是Objective-C教程,但可能有助于了解故事板的概念:

    编辑:

    根据视图实际执行的操作,为UITableViewCell详图显示视图的正常方法是将详图视图放在单独的视图控制器内,并通过segue链接

    我真的不知道为什么你的应用程序会因为你的代码而崩溃——这真的取决于故事板是如何设置的。如果要用代码实现,可以这样做:

    class ViewController: UIViewController {
    
      var greenView = UIView(frame: CGRect(x:100,y:500,width:200,height:200))
      var greenButton = UIButton(frame: CGRectMake(20, 20, 80, 40))
    
      override func viewDidLoad() {
        super.viewDidLoad()
        greenView.backgroundColor = UIColor.greenColor()
        greenView.addSubview(greenButton)
        greenButton.setTitle("Close Me", forState: .Normal)
        greenButton.addTarget(self, action: "hideGreenView", forControlEvents: .TouchUpInside)
      }
    
      func hideGreenView() {
        self.greenView.removeFromSuperview()
      }
    
      @IBAction func greenview(sender: AnyObject) {
        self.view.addSubview(greenView)
      }
    
    }
    
    该代码假定您在故事板上有一个链接到greenview()的按钮,但其其余部分不在故事板上

    当然,您也可以在故事板上创建视图,并将其作为隐藏视图,然后在函数中隐藏或取消隐藏。如果要将视图动画化,可以使用UIView动画


    如果您的UIViewController是UITableViewController,您也可能会遇到问题。在UIViewController中可以有一个UITableView,UIViewController是委托和数据源,但对我来说这似乎是一个“难闻”的代码(当然,这取决于您实际试图实现的目标)。

    您可以将自定义视图放在视图控制器中,并使用分段加载自定义视图

    这意味着您可以在情节提要中(在其新视图控制器下)拥有自定义视图,并拥有从表视图单元格到新视图控制器的一个序列,以及从新视图控制器到原始视图控制器的一个展开序列

    这是一个Objective-C教程,但他可能