ios - 我想在 UIView 类中按下按钮时触发导航控制器
问题描述
当我按下 UIView 类中的按钮时,我想将导航控制器触发到其他屏幕。我怎样才能做到这一点?
//UIView 类的代码,其中创建了 Button Iboutlet
import UIKit
protocol ButtonDelegate: class {
func buttonTapped()
}
class SlidesVC: UIView {
var delegate: ButtonDelegate?
@IBAction func onClickFinish(_ sender: UIButton) {
delegate?.buttonTapped()
}
@IBOutlet weak var imgProfile: UIImageView!
}
//ViewController Class code in Which Button Protocol will be entertained
class SwipingMenuVC: BaseVC, UIScrollViewDelegate {
var slidesVC = SlidesVC()
override func viewDidLoad() {
super.viewDidLoad()
slidesVC = SlidesVC()
// add as subview, setup constraints etc
slidesVC.delegate = self
}
extension BaseVC: ButtonDelegate {
func buttonTapped() {
self.navigationController?.pushViewController(SettingsVC.settingsVC(),
animated: true)
}
}
解决方案
更简单的方法是使用 typealias。您必须在 2 个地方编写代码。1. 你的 viewClass 和 2. 在你的 View Controller 中。
在您的 SlidesView 类中添加一个 typealias 并定义参数类型,如果您需要,否则将其留空。
class SlidesView: UIView {
typealias OnTapInviteContact = () -> Void
var onTapinviteContact: OnTapInviteContact?
@IBAction func buttonWasTapped(_ sender: UIButton) {
if self.onTapinviteContact != nil {
self.onTapinviteContact()
}
}
}
class SwipingMenuVC: BaseVC, UIScrollViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let slidesView = SlidesView()
slidesView.onTapinviteContact = { () in
// do whatever you want to do on button tap
}
}
推荐阅读
- c# - 使用 Base64 发布文件上传请求
- python-3.x - tkinter 插入输出文本字段(output.insert())不起作用
- android - 布局文件或 .xml 文件中的意外标记
- python-3.x - 为什么游戏重启后无法重置?
- reactjs - 当状态是对象的对象时组件重新渲染
- angular - 不考虑时区的时间戳到日期转换
- android - 创建具有动态颜色的自定义 xml 可绘制对象
- vue.js - 如何解决 vue-tables-2 中的嵌入排序问题?
- apache-kafka - 代理日志中有关混合偏移提交类型的警告
- cordova - Cordova 插件文档扫描仪