swift中类似火种的导航
Posted
技术标签:
【中文标题】swift中类似火种的导航【英文标题】:Tinder-like navigation in swift 【发布时间】:2016-10-31 20:23:32 【问题描述】:我正在尝试使用this 框架,该框架提供了一个类似于 Tinder (Swift 3) 的导航栏。
我的目标是以透明的方式使用它 - 意思是 - 嵌入它并在情节提要上拥有 3 个独立的视图控制器,以及它们的 VC.swift 文件并使用 segues。
Here 是一个工作测试项目,具有 Tinder 风格和 Storyboard 中的 3 个 ViewController。
在我的项目中使用它之前,我想对其进行测试,所以我更新了这个项目。
正如我所见,nav 是具有 3 个 VC 并在它们之间切换的 UINavigationController。我想在故事板上看到他。
如此安装:
var nav: UINavigationController?
我在 UI builder 和 UINavigationController 类上创建了一个 UINavigationController,名为 MainNavigationController。
var nav: MainNavigationController?
nav = mainStb.instantiateViewController(withIdentifier: "mainNavigationController") as? MainNavigationController
我还向情节提要添加了一个简单的初始视图控制器,我从这个 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 个视图控制器中
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
但它从来没有达到这个方法。我需要它在视图控制器之间传递数据。怎么办?
此外,您将如何通过点击一个元素(如按钮)来实现从一个视图控制器到另一个视图控制器的转场?如果我使用按钮设置一个常规的 segue,从一个 VC 到另一个 - 它显示没有导航栏的目标 VC
我上传了我当前的实现here。
任何帮助都会得到帮助。 谢谢。
【问题讨论】:
* 感谢 @DavidSeek 提供了 SLPagingView swift 3 版本中的代码以及带有 VC 的示例项目。 按钮方法中的performSegueWithIdentifier
对您没有任何作用,因为您已经替换了 setNav
中的根视图控制器,并且您的视图现在位于情节提要环境“外部”
【参考方案1】:
好的。我已经下载了你的项目,因为你的解释没有真正的帮助..
首先:如果您的故事板只有空白屏幕,请为它们着色,以便其他编码人员能够更快地了解正在发生的事情。
您从黄色的VC
到UINavigationController
的转场已触发,但未使用,因为您以编程方式实例化了UINavigationController
。
// Sets the root
func setNav()
// here
nav = MainNavigationController(rootViewController: controller)
appDelegate.window?.rootViewController = nav
appDelegate.window?.makeKeyAndVisible()
从绿色 VC 到蓝色 VC 的转场没有任何意义,因为没有转场。这些控制器嵌入到同一个控制器中。
您正在设置 perform(forSegue
函数,但您从未调用它。如果有转场,你只使用perform(forSegue
。但事实并非如此。
设置不带setNav()
函数的按钮:
@IBAction func buttonSegue(_ sender: Any)
//setNav()
self.performSegue(withIdentifier: "segue", sender: nil)
蓝色的VC
结果为单个VC
。
没有segue的相同功能,结果与segue相同。因为如前所述,无论如何您都以编程方式设置了所有内容:
@IBAction func buttonSegue(_ sender: Any)
setNav()
//self.performSegue(withIdentifier: "segue", sender: nil)
由于您已在全局范围内实例化了 VCs
,因此您可以在全局范围内获取/设置 VCs
值...
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
结果:
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.
*/
删除所有不必要的 cmets。
【讨论】:
感谢@DavidSeek,现在一切都清楚了。我刚刚在 func passData 的末尾添加了类似 segue 的行:“controller.setCurrentIndex(1, animated: false)”。这正是我需要向自己展示和理解的。我很抱歉质量和编码标准不佳。我仍然认为我自己对 swift 来说非常陌生。我很高兴收到您的一般 cmets 和提示。非常感谢。 这不是为了冒犯或拉你回来。我只是给你(在我的理解)有用的提示。既然问题已经回答了,请不要忘记接受,如果有帮助,请点赞。 他们很有帮助,正如我所说,@DavidSeek 你的建议总是受欢迎的。我提出了另一个(重要的)问题,如果你看一下会很高兴。谢谢:***.com/questions/40428075/… 嗨@DavidSeek 或其他观众。我在这里发布了一个与示例项目相关的问题:***.com/questions/40428075/… 我找不到如何实施我在我的上下文中找到的解决方案(SLPagingView)。如果有人可以看一下并提供帮助,我将不胜感激,谢谢!以上是关于swift中类似火种的导航的主要内容,如果未能解决你的问题,请参考以下文章