2016-03-20 86 views
0

我有一个类的实例来处理和实现我的视图控制器之间的滑动导航。我在该类中有一个方法,它允许我模拟滑动导航到另一个视图控制器。另一个类没有创建实例的调用方法

在一个完美的场景中,我会向IB中的视图控制器添加一个按钮,并在其动作中调用处理程序类的方法以导航到其他视图控制器。

这似乎是我试图重新创建一个实例,显然不工作,因为它没有所有的信息其他实例。

我也尝试从处理程序类本身添加一个按钮的子视图到我的视图控制器,这工作,但我想知道是否有更漂亮的方式。

也许从我的其他视图控制器访问已存在的类的实例,以调用该方法?我试过swipe().navigateToLeftVC()并重新创建实例。

+0

我刚刚注意到初始实例是在应用程序委托中创建的,并分配给了window.rootviewcontroller。这会有什么帮助吗?再次感谢 – Walking

+1

也许你可以创建一个具有如下实例值的全局变量:'let myInstance = myClass()',然后在需要调用函数时引用该实例。由于它是在全局范围内定义的,因此可以在任何地方引用该实例。另外,也许创建一个单例而不是全局变量。 – Harish

+0

您也可以将实例传递给每个视图控制器 – Shades

回答

1

我通过创建一个单例解决了这个问题。

将此代码添加到我的控制器

class var sharedManager: controllerName { 
     struct Static { 
      static let instance = controllerName() 
     } 
     return Static.instance 
    } 

然后在我指定以我用controllerName.sharedManager根视图控制器,其返回我的单个实例我的应用程序委托。

然后在我的其他视图控制器中,当我想调用该类的方法时,我使用了controllerName.sharedManager.methodName()

完美地工作。

+1

虽然这可能在此应用程序中正常工作。你真的应该避免让View Controller不必要的实例。用这种方法,你现在有两个版本的* controllerName()*类。这可能会导致未来出现意想不到的问题。我有一些可能的替代方案给你。你在使用导航控制器吗? –

+1

确实这个词*完美*在这里是一个延伸。这不是一个完美的解决方案。它可以工作,当然。但实际上,这不是理想的解决方案。我们需要在实际的代码中看到更多的内容,才能理解为什么你甚至觉得这是必要的。 – nhgrif

+0

谢谢大家分享你的知识。 @nhgrif:我有一个类(EZSwipeController),通过你的视图控制器实现侧滑动。它带有一个我不使用的导航控制器实现,因为它不适合我的应用程序。所以,我需要一种能够在我的视图控制器中拥有按钮的方法,这些按钮调用EZSwipeController库的方法,以便拥有一个替代方法来滑动视图控制器并能够浏览按钮操作。你能解释我如何有两个版本的controllerName,如果我只是实例化1? – Walking

相关问题