gpt4 book ai didi

ios - swift 中类似 Tinder 的导航

转载 作者:行者123 更新时间:2023-11-28 16:05:37 28 4
gpt4 key购买 nike

我正在尝试使用 this提供类似 Tinder (Swift 3) 导航栏的框架。

我的目标是以一种透明的方式使用它——也就是说——将它嵌入并在 Storyboard上拥有 3 个独立的 View Controller ,以及它们的 VC.swift 文件并使用 segues。

Here是一个工作测试项目,具有 Tinder 风格和 Storyboard 中的 3 个 ViewController。

在我的项目中使用它之前,我想测试它,所以我更新了这个项目。

如我所见,nav 是具有 3 个 VC 并在它们之间切换的 UINavigationController。我想在 Storyboard上看到他。

所以代替了:

var nav: UINavigationController?

我在 UI 构建器和 UINavigationController 类上创建了一个 UINavigationController,名为 MainNavigationController。

var nav: MainNavigationController?
nav = mainStb.instantiateViewController(withIdentifier: "mainNavigationController") as? MainNavigationController

我还向 Storyboard添加了一个简单的初始 View Controller ,从这个 VC 我将(使用按钮)连接到 MainNavigationController:

@IBAction func buttonSegue(_ sender: Any) {
setNav()

self.performSegue(withIdentifier: "segue", sender: nil)
}

func setNav() {


//// implement my logic (if logged in go to... if not go to...)

instantiateControllers()
setItems()

let items = [UIImageView(image: chat),
UIImageView(image: gear),
UIImageView(image: profile)]

let controllers = [oneVC!,
twoVC!,
threeVC!] as [UIViewController]

controller = SLPagingViewSwift(items: items, controllers: controllers, showPageControl: false)

setupController()


nav = MainNavigationController(rootViewController: controller)
appDelegate.window?.rootViewController = nav
appDelegate.window?.makeKeyAndVisible()
}

到目前为止一切正常。 但是:

我目前唯一的问题是我无法控制转场。在我添加的 3 个 View Controller 中

override func prepare(for segue: UIStoryboardSegue, sender: Any?)

但它永远不会命中此方法。我需要它在 View Controller 之间传递数据。怎么做到的?

此外,您将如何通过点击一个元素(如按钮)实现从一个 View Controller 到另一个 View Controller 的转场?如果我使用按钮设置常规转场,从一个 VC 到另一个 - 它显示没有导航栏的目标 VC

我上传了我当前的实现 here .

任何帮助将不胜感激。谢谢。

最佳答案

好的。我已经下载了你的项目,因为你的解释并不是很有帮助..

首先:如果您的 Storyboard只有空白屏幕,请为它们着色,以便其他编码人员能够更快地了解发生了什么。

enter image description here

您从黄色 VCUINavigationController 的 segue 被触发,但未被使用,因为您以编程方式实例化了 UINavigationController

// Sets the root
func setNav() {
// here
nav = MainNavigationController(rootViewController: controller)
appDelegate.window?.rootViewController = nav
appDelegate.window?.makeKeyAndVisible()
}

您从绿色 VC 到蓝色 VC 的转场没有任何意义,因为没有转场。这些 Controller 嵌入到同一个 Controller 中。您正在设置 perform(forSegue 函数,但您永远不会调用它。如果有 segue,您只会使用 perform(forSegue。但事实并非如此。

不使用 setNav() 函数设置按钮:

@IBAction func buttonSegue(_ sender: Any) {
//setNav()
self.performSegue(withIdentifier: "segue", sender: nil)
}

将蓝色 VC 作为单个 VC 生成。

enter image description here

没有 segue 的相同函数,结果与有 segue 的逻辑相同。因为如前所述,您无论如何都以编程方式设置所有内容:

@IBAction func buttonSegue(_ sender: Any) {
setNav()
//self.performSegue(withIdentifier: "segue", sender: nil)
}

enter image description here

由于您已经在全局实例化了 VC,因此您可以在全局范围内获取/设置 VC 值...

class OneVC: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
}

@IBAction func passData(_ sender: Any) {
let oneVCString = "This String is passed from OneVC"
twoVC?.theLabel.text = oneVCString
}
}

结果:

enter image description here

Here is this on Github作为你项目的一个分支。我还从 AppDelegate 中删除了您的代码。没有用,无论如何都被调用了。您已经在 Interface Builder 中做了同样的事情。

最后但同样重要的是我的评论:清理你的代码!其他用户可能对此有不同的看法,但这不是我想与其他编码人员一起工作的方式:

import UIKit

class TwoVC: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("from two to...")
print(segue.identifier!)
}
/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/

}

删除所有不必要的评论。

关于ios - swift 中类似 Tinder 的导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40350010/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com