如何与 AppDelegate 中的特定视图交互?

Posted

技术标签:

【中文标题】如何与 AppDelegate 中的特定视图交互?【英文标题】:How can I interact with specific Views from the AppDelegate? 【发布时间】:2017-02-01 03:30:04 【问题描述】:

我的 appdelegate 中有一个函数,它在通知触发时被调用。当调用此函数时,我希望能够访问特定的 ViewController 并操作表格单元格,无论它是否是当前视图。 我能够使用 rootViewController 方法使其工作,但由于它不再设置为根视图,因此不再工作。

我目前正在使用此代码:

let stopOption = UIAlertAction(title: "OK", style: .default) 
        (action:UIAlertAction)->Void in self.audioPlayer?.stop()
        print("Stop index is \(index)")
        Alarms.sharedInstance.setEnabled(false, AtIndex: index)
        let sb = UIStoryboard(name: "Main", bundle: nil)
        let mainVC = sb.instantiateViewController(withIdentifier: "MainVC")
        dump(mainVC)
        let cells = (mainVC as! MainAlarmViewController).tableView.visibleCells
        dump(cells)
        for cell in cells
        
            if cell.tag == index
                print("Found the cell")
                let sw = cell.accessoryView as! UISwitch
                sw.setOn(false, animated: false)
            
        
    

第一个“转储”语句返回了正确的 ViewController,但它没有显示任何子视图,第二个转储语句返回“- 0 个元素”。

非常感谢任何帮助。

【问题讨论】:

您可以访问视图控制器。但是只有在加载主视图后才能访问子视图。 函数被调用时哪个控制器可见? 我应该补充一点,在此通知到达时 MainAlarmViewController 已加载,并且无论 MainAlarmViewController 当前是否可见,单元格都不会更新。 【参考方案1】:

当这个函数被调用时,我希望能够访问一个特定的 ViewController 并操作一个表格单元格,无论它是否是当前视图

为此,您需要使用Notification

这里是如何使用通知http://dev.iachieved.it/iachievedit/notifications-and-userinfo-with-swift-3-0/的示例

您可以从AppDelegate 发布通知并赶上ViewController

【讨论】:

以上是关于如何与 AppDelegate 中的特定视图交互?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 以编程方式更改 AppDelegate 中的视图

从 AppDelegate 呈现特定的视图控制器

如何将数据从 appdelegate 传递到视图控制器?

从 AppDelegate、Swift 导航到 TabBarController 内的特定视图控制器

每次将视图控制器压入堆栈时,如何从 appDelegate 重新加载视图控制器?

如何通过iOS Objective C中的appDelegate从另一个视图控制器重新加载表视图