Swift - 使用 selectedIndex 更改 var

Posted

技术标签:

【中文标题】Swift - 使用 selectedIndex 更改 var【英文标题】:Swift - Change var with selectedIndex 【发布时间】:2018-06-11 20:15:20 【问题描述】:

我正在尝试通过更改tabBarControllerselectedIndexViewController1 变为ViewController2

在 ViewController1 中:

func action() 
   _ = self.tabBarController?.selectedIndex = 4

在 ViewController2 中:

class ViewController2: UIViewController 
   var isOnInfo = true

我的问题很简单。我想在action() 函数中更改isOnInfo 的值。 有可能吗?

另一种方法是创建一个全局变量,但如果我能避免这样做会更好。

感谢您的回答。

【问题讨论】:

【参考方案1】:

我可以建议您在标签栏控制器中移动您的标签更改逻辑。 创建自己的类 TabBarController(UITabBarController 的子类),将其设置为故事板中标签栏控制器的自定义类,并将函数 action() 移动到那里。

import UIKit

class TabBarController: UITabBarController 

    override func viewDidLoad() 
        super.viewDidLoad()
    

    func action(isOnInfo: Bool) 
        selectedIndex = 4
        if let viewControllers = self.viewControllers,
            let viewController2 = viewControllers[selectedIndex] as? ViewController2 
            viewController2.isOnInfo = isOnInfo
        
    

然后在viewController1中:

if let tabBarController = self.tabBarController as? TabBarController 
        tabBarController.action(isOnInfo: false)
    

【讨论】:

我试过了,但它不起作用。 viewController2.isOnInfo 的值没有改变... 奇怪。我用它创建了一个项目,它对我有用。你的标签栏有多少个视图控制器? @KevinB 可能出现的问题: 1)如果不能将self.tabBarController赋值为? TabBarController 那么你应该在 StoryBoard 上将 TabBarController 分配给你的 2)如果你不能将 viewController 分配为? ViewController2 那么你应该检查你的 selectedIndex。 SelectedIndex 从 0 开始!例如,如果您想将第二个 viewController 设置为 2,则 selectedIndex = 1【参考方案2】:

您可以在 tabbarcontroller 中的选定索引处获取 viewcontroller 的对象。拥有它后,您可以修改任何公共属性。

     func action()  

   _ = self.tabBarController?.selectedIndex = 4

     if let vc2  = self.tabBarController?.viewControllers![4]  as?  
     ViewController2
               

                   vc2.isOnInfo = true  
               
    

【讨论】:

以上是关于Swift - 使用 selectedIndex 更改 var的主要内容,如果未能解决你的问题,请参考以下文章

关于swift 自定义TabBarView使用系统tabar遇到的问题

标签栏选择swift中的索引

使用选定的文本而不是 selectedIndex

selectedIndex 选择器(检查选择数组是不是有 selectedIndex > 0)[关闭]

带有 selectedIndex 设置 matStepperNext/matStepperPrevious 的角步进器不起作用

html中的<select>怎么使用selectedIndex属性