【发布时间】:2019-06-21 19:47:22
【问题描述】:
我正在尝试通过选择一个单元格来转换到另一个 UIViewController(它是 UITabBarController 的一部分)。
我有一个HistoryViewController,其中包含此单元格和表格视图。一旦用户通过LoginViewController 登录,此历史视图控制器就会“呈现模态当前上下文”。不确定这对问题是否重要,但我认为值得一提。
这是层次结构:
-LoginViewController
-> HistoryViewController(这是下面列出的代码所在的位置)
-ViewController(一旦用户单击特定单元格,我就会尝试去那里。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
LocationInformation.city = locations[indexPath.row].city
LocationInformation.state = locations[indexPath.row].state
self.tabBarController?.selectedIndex = 1
}
目标是将位置的城市和州设置为全局变量“LocationInformation”(有效),然后更改为无效的ViewController。
代码self.tabBarController?.selectedIndex = 1 在我称为“searchViewController”的不同视图控制器中工作,用户可以在其中输入他们的位置和状态。
【问题讨论】:
-
您的标签栏控制器出现在您的层次结构中的什么位置?
-
如果您的“History VC”在“Login VC”中以模态方式呈现,那么它将没有 tabBarController 属性。看起来你的“Login VC”是根控制器,它会有 tabBarController 指针。您可以让“登录 VC”成为“历史 VC”的代表,或者查看您的视图层次结构
-
@Callam 的“ViewController”和“LoginViewController”(导致“HistoryViewController”都在 TabBarController 下。就像 lobstah 所说的“Login VC”是根控制器。
-
@lobstah 是的 LoginViewController 是 RootViewController,让“Login VC”成为“History VC”的代表的最佳方法是什么?或者有没有更好的方法在用户访问“HistoryViewController”之前显示登录?
-
我更愿意创建一个 move VC(我们称之为 Root),它将负责显示登录或历史记录,具体取决于您应用的实际状态。它可以在用户登录之前以模态方式显示登录,然后关闭登录并显示历史记录。但是您仍然需要将登录和历史记录中的数据传递到此 Root VC,以便它知道该怎么做。您可以选择任何您喜欢的方法来实现它(委托、完成处理程序、通知、反应式编程等)。
标签: ios swift uitableview uitabbarcontroller didselectrowatindexpath