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 的顶部分层一个按钮的主要内容,如果未能解决你的问题,请参考以下文章
在自定义 UIView 类中从 UIView 快速创建 IBoutlet [重复]
在自定义 UIview 中设置 UItableview 的委托和数据源