在另一个通过IBaction读取动态变量的类中调用函数

时间:2015-09-30 15:04:22

标签: ios swift function variables

我试图调用存储在另一个类上的函数:

的ViewController

@IBAction func refreshComments() {
    CommentsTableViewController().refresh()
}

CommentsTableViewController

 var variable2 = "0"

 func refresh(){
     print(variable2)
  }

这很好用,但在我的情况下,我的变量的值不是静态值,我已经动态地接收了这个值,我知道问题在于这一行:

//CommentsTableViewController().refresh()

因为CommentsTableViewController() - 这是类构造函数,每次调用CommentsTableViewController()时,它都会返回CommentsTableViewController类的新实例/对象,当然默认值为。

所以我真的陷入了困境,我不知道如何解决这个问题。我已经尝试将func refresh()转换为funcrefresh()类,并按此方式调用:

@IBAction func refreshComments() {
CommentsTableViewController.refresh()
}

但是这样我得到一个错误,我无法读取变量2

  

print(variable2) - 实例成员' variable2'不能用于类型' CommentsTableViewController'

有什么想法吗?

修改 遵循我的层次结构: enter image description here

3 个答案:

答案 0 :(得分:1)

在容器中处理控制器到控制器有点困难。尝试以编程方式填充容器。否则你将无法控制控制器。

您也可以使用通知,但通知不应用于一对一通信。

以编程方式创建

  • 您有一个Container并将IBOutlet链接到您的MainController。
  • 您还为CommentsViewController
  • 创建了一个属性 故事板中的
  • 为您的控制器提供了storyboardIdentifier
  • 在主控制器的viewDidLoad中,您可以使用故事板中的控制器实现commentsController属性。
  • 将控制器作为childViewController添加到mainController,并将CommentsViewController中的视图添加到containerView
  • 可能是您需要将comments.frame从commentsViewController设置为与containerView相同

现在你有一个控制器属性,你可以运行任何公共功能。

很抱歉没有代码示例。我目前没多少时间:)

通知

您的主视图控制器将向特定名称发送通知,并且CommentsViewController将观察此通知并在接收时执行操作。

NSNotificationCenter.defaultCenter().postNotificationName(name:"YourNameYouLike")

在commentsViewController中,您会看到此通知。

NSNotificationCenter.defaultCenter().addObserverForName(name:"theSameNameThatYourPostNotificationDidUse", object: nil, queue: mainQueue) { [weak self] in 
    guard s = self else { return } 
    s.reload()
}

答案 1 :(得分:0)

您应该将控制器存储在调用者的属性中。您可以从属性调用刷新函数,变量可以更改。

答案 2 :(得分:0)

不确定如何设置视图控制器层次结构,但每次需要调用CommentsTableViewController函数时都不应初始化refresh

variable2内相信您的CommentsTableViewController被修改并保留所提到的动态值,您应该在已存在的refresh对象上调用CommentsTableViewController函数最新和最伟大的财产价值。

希望这对你有意义!