在弹出窗口中访问TableView Outlet,但不存在

时间:2014-09-02 08:50:46

标签: ios swift

我在popover中遇到了一个下载管理器的问题。

以下是我现在的样子:

downloadmanager

当您点击我的仪表板中的任何文件时,该文件会自动附加到我的下载管理器。但是在momemt我需要在我的单元格中点击下载开始每次下载。

现在我想开始下载而不会看到Popover,如果我点击popover,我会看到我的文件的进度。

这里的问题是,我在downloadmanager中有一个IBOutlet用于我的表,当弹出窗口不存在时,这是nil。

所以我的整个FileDownloadHandlerClass都没有用,因为我有很多对我的Outlet的引用。

这是一些代码:

//在MainViewController中创建管理器实例

let manager = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("FileDownloadHandler") as FileDownloadHandlerViewController

//在barButtonClick

@IBAction func downloadManagerButtonPressed(sender: AnyObject) {

    let navController = UINavigationController(rootViewController: manager)
    let popover = UIPopoverController(contentViewController: navController)
    popover.popoverContentSize = manager.view.frame.size
    popover.presentPopoverFromBarButtonItem(sender as UIBarButtonItem, permittedArrowDirections: UIPopoverArrowDirection.Left | .Up, animated: true)

}

//这就是我尝试开始下载的方式

func addFileToFileHandler(notification: NSNotification){

    var fileObject:Files = notification.object as Files

    let fileurl = fileObject.url
    let filetitle = fileObject.filetitle
    let fileuuid = fileObject.fileuuid

// this is my global Files Dictionary
    arrFileDownloadData.append(FileDownloadInfo(fileuuid: fileuuid, title: filetitle, source: fileurl))

// Start first download automatically. (only for test, normally i know the cell index)
    manager.startDownload(0)

}

那么有机会让我的IBOutlet可以在课堂外访问吗?还是其他想法?或者我应该在我的mainView中为我的Popover创建我的TableView并将其添加为子视图,以便我可以访问它?

提前致谢。

1 个答案:

答案 0 :(得分:0)

manager不是popover的实例吗?它是nav的根控制器,其中nav是popover的contentController。你在本地声明popover:

let popover = UIPopoverController(contentViewController: navController)

如果可以的话,你可以尝试为你popover提供类似的全局参考:

@IBAction func downloadManagerButtonPressed(sender: AnyObject) 
{
     // if globalPopoverReferenceVar is not yet initialized
     if( globalPopoverReferenceVar == nil )
     {
         let navController = UINavigationController(rootViewController: manager)
         let popover = UIPopoverController(contentViewController: navController)
         popover.popoverContentSize = manager.view.frame.size

         // like this
         globalPopoverReferenceVar = popover
     } 

     globalPopoverReferenceVar!.presentPopoverFromBarButtonItem(sender as UIBarButtonItem, permittedArrowDirections: UIPopoverArrowDirection.Left | .Up, animated: true)
}