XCode:在自定义 UIView 的顶部分层一个按钮

Posted

技术标签:

【中文标题】XCode:在自定义 UIView 的顶部分层一个按钮【英文标题】:XCode: Layering a button over the top of a custom UIView 【发布时间】:2020-07-01 16:12:57 【问题描述】:

在 XCode 11 中,我有一个 ViewController 用作 UI 中的主页。在这个 VC 中,有 6 个 UIView,分两排,每排三个。每个 UIView 都使用相同的 XIB 进行定制,它提供格式、文本字符串和图像。到目前为止,所有这些都非常有效。

我现在想为六个 UI 视图中的每一个添加一个按钮。每个按钮将使用 SFSafariViewController 打开一个超链接,使用每个按钮唯一的 URL(即可以打开六个不同的超链接)。我尝试了这三种方法,但没有一种方法适合我

    最喜欢 - 我想用一个 IBAction 函数向 XIB 文件 (myClass) 添加一个按钮,该函数是 myClass 的一种方法。我在 XIB 上创建了一个按钮并将其链接到下面的 IBAction 插座。我明白为什么这不起作用 - myClass 是 UIView 的子类,而“present”是 UIViewController 的方法 - 但我不知道要写什么,或者是否可能

     @IBAction func buttonTapped() 
     let vc = SFSafariViewController(url: URL(string: "https://www.***.com")!)
     present(vc,animated:true)
    

    下一个最好的事情 - 在我的主故事板中,我尝试为每个 UIView 添加一个按钮(总共六个按钮)。在情节提要中,按钮显示为位于 UIView 的顶部。但是当应用程序运行时,按钮位于 UIView 后面。这是一张图片,我将圆边 UIView 着色为白色,将锐边按钮着色为绿色

我们将非常感谢您提供这些解决方案之一的帮助

【问题讨论】:

尝试使用委托模式,单击其中一个按钮并委托回主视图控制器以转到 url? 【参考方案1】:

我最终通过上述第 1 项的解决方案解决了这个问题,将按钮添加到 XIB 中。我引用了这个视频,但有一个警告(见下文):

https://www.youtube.com/watch?v=EBYdsYwoJVI&t

简短的总结:

    使用您的自定义 UIView 创建一个 XIB,包括您想要包含的按钮 将 XIB 链接到 Swift 文件,并在文件中创建按钮作为插座(myButton,在名为 myClass 的文件中) 切换回情节提要并设置 UIView 使其成为 myClass 类型 在主 ViewController 中为此 UIView (myView:myClass) 创建一个 outlet

这是我卡住的地方,也是我在上面写问题的地方

    在 XCode 中,您可以使用 ViewController 为按钮分配触摸动作,使用以下代码,其中我调用的函数名为“buttonTap”:

    override func viewDidLoad() 
    
    super.viewDidLoad()
    
    myView.myButton.addTarget(self, action: #selector(self.buttonTap), for: UIControl.Event.touchUpInside)
    
    

    与视频略有不同,然后您只需在 viewDidLoad 函数之外编写函数 - 但如果您使用 Swift 4.0 或更高版本,请确保使其对 @objc 可见

    @objc func buttonTap(sender: UIButton)
    [button action]
    
    

【讨论】:

以上是关于XCode:在自定义 UIView 的顶部分层一个按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何快速在自定义导航栏顶部制作一半的 ImageView

在自定义 UIView 类中从 UIView 快速创建 IBoutlet [重复]

在自定义 UIview 中设置 UItableview 的委托和数据源

touchesBegin 在自定义 UITableViewCell,touchesEnded 在 UIView

在自定义 UIView 上为 UIButton 设置动画

在UI视图顶部的OpenGL GLKView覆盖 - iOS / Xcode