从 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 无法将 bookQuoteScreenbusinessQuoteScreen 识别为有效的类型。在突出显示的行中,例如。

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的主要内容,如果未能解决你的问题,请参考以下文章

包含 UITableView 和 UITabBar 的视图

使用 UITableView 填充 UITabBar

UITabBar 将隐藏 UITableView 的最后一个单元格

UITabBar 覆盖的 UITableView 页脚视图

UITableView中的UITabBar MoreViewController图像在以编程方式选择后消失

从 UITableView 转为 UITabBarController