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

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

在 ViewController1 中:

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

在 ViewController2 中:

class ViewController2: UIViewController {
   var isOnInfo = true
}

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

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

感谢您的回答。

【问题讨论】:

    标签: ios swift swift3 delegates


    【解决方案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  
                   }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-09
      • 2016-02-10
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多