从 UITableView 转为 UITabBarController
Posted
技术标签:
【中文标题】从 UITableView 转为 UITabBarController【英文标题】:Segue from UITableView to UITabBarController 【发布时间】:2016-09-02 03:19:32 【问题描述】:我正在创建一个允许用户每天查看随机报价的应用程序。在这个应用程序中,用户在能够实际使用该应用程序之前被问到 3 个问题。最后一个问题是一个简单的“你最喜欢的类别/主题是什么”。使用此提示,用户将点击一个单元格并被带到一个标签栏控制器,其中第一个“子”视图控制器是引用本身。
问题: 我希望用户能够点击 UITableViewCell 以及他们点击的 TabBarController 效果。
那是我到目前为止遇到的错误的照片。这是代码。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
if(segue.identifier == "bookSegue")
let bookQuoteTabBar = segue.destinationViewController as! UITabBarController
let bookQuoteScreen = bookQuoteTabBar.viewControllers?[0] as? bookQuoteScreen
else if(segue.identifier == "businessSegue")
let businessQuoteTabBar: UITabBarController = segue.destinationViewController as! UITabBarController
let businessQuoteScreen = businessQuoteTabBar.viewControllers?[0] as? businessQuoteScreen
最终,会有更多的话题,意味着更多的转折。但现在,我从两个开始
每个 TabBarController 的 segues 是: “书赛格” “商业赛格”
标签栏是: “bookQuoteTabBar”和“businessQuoteTabBar”
第一个“子”视图控制器是: “bookQuoteScreen” “商业报价屏幕”
我应该写点别的吗?我是否正确命名了每个对象的 Segue、身份和类?如果您需要更多信息或参考资料,请评论我应该添加的内容,我会在几分钟内添加。提前谢谢!
---------最近的编辑---------
BooksQuoteScreen:
import Foundation
import UIKit
class BooksQuoteScreen: 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.
BusinessQuoteScreen:
import Foundation
import UIKit
import Social
class BusinessQuoteScreen: UIViewController
//============================//
//********** Outlets *********//
//============================//
let utility = Utility()
@IBOutlet weak var quoteDisplay: UILabel!
@IBOutlet weak var authorDisplay: UILabel!
@IBOutlet weak var quoteBackground: UIImageView!
...
【问题讨论】:
【参考方案1】:您的屏幕截图中的错误(“Use of undeclared type ....”)表明 Xcode 无法将 bookQuoteScreen
和 businessQuoteScreen
识别为有效的类型。在突出显示的行中,例如。
let bookQuoteScreen = bookQuoteTabBar.viewControllers?[0] as? bookQuoteScreen
类型(在“as?”之后指定)必须与 .swift 文件中定义的类名匹配。非常仔细地检查使用的名称是否与“BusinessQuoteScreen.swift”和“BooksQuoteScreen.swift”中定义的类名(可能)匹配。没有看到这些文件的内容,我不能确定,但我怀疑前导字符需要大写(它应该是类名),你可能需要一个“s” "BooksQuoteScreen":
let bookQuoteScreen = bookQuoteTabBar.viewControllers?[0] as? BooksQuoteScreen
和
let businessQuoteScreen = businessQuoteTabBar.viewControllers?[0] as? BusinessQuoteScreen
【讨论】:
我仍然遇到同样的错误,即使它们似乎都匹配。我错过了一个区域吗?你能解释一下如何设置它吗?也许我可以重做这个,而不是第二次搞砸。其他人或许也能从中吸取教训,以免犯我犯的愚蠢错误。 @JNorris 如果您仔细检查了名称等,Xcode 可能没有意识到您的两个 swift 文件应该包含在“目标”中。您可以检查:选择左侧列表中的每个文件,然后在右侧,单击方形图标(“快速帮助”上方)以显示文件检查器。再往下 RHS Xcode 将显示“Target members” - 那里列出了哪些名称,它们是否打勾? 第一个说“每日报价”,它有一个复选标记。第二个说“引用 DailyTests”,未选中。最后说“引用 DailyUITests”,也没有检查。两个文件都是一样的 好的,应该是这样。您可以编辑您的帖子以包含这两个文件中的类定义吗? 好的。我发布了它,但现在似乎“BusinessQuoteScreen”的错误消失了。这样就成功了一半。以上是关于从 UITableView 转为 UITabBarController的主要内容,如果未能解决你的问题,请参考以下文章
UITabBar 将隐藏 UITableView 的最后一个单元格