如何在不进入该视图控制器的情况下将子视图添加到另一个视图控制器?

时间:2016-02-10 15:57:50

标签: ios swift

我想实现这个功能:在左侧滑出菜单中,当我选择一张图片时,这张图片将在家庭视图控制器上生成。 链接是拍摄的图像。 http://postimg.org/image/kcd3jhd6x/

以下是代码:

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {


    let halfSizeOfView = 25.0
    let insetSize = CGRectInset(self.view.bounds, CGFloat(Int(2 * halfSizeOfView)), CGFloat(Int(2 * halfSizeOfView))).size

    let pointX = CGFloat(UInt(arc4random() % UInt32(UInt(insetSize.width))))
    let pointY = CGFloat(UInt(arc4random() % UInt32(UInt(insetSize.height))))

    if(searchActive){
       imageName=filtered[indexPath.row]+".png"
    }else{
       imageName=data[indexPath.row]+".png"
    }

    let wid=UIImage(named: imageName)?.size.width
    let hei=UIImage(named: imageName)?.size.height
    let newImageView = ImageViewList(frame: CGRectMake(pointX, pointY, wid!, hei!))
    newImageView.image=UIImage(named: imageName)

    let vc=HomeViewController()
    vc.view.addSubview(newImageView)

}

因为我想在按下单元格时保持滑出菜单,所以我无法执行performSegueWithIdentifier功能。我也尝试过协议传递值方法,但似乎无法正常工作。有人提出建议吗?感谢!!!

1 个答案:

答案 0 :(得分:0)

您需要将弱引用(delegate)存储到SideMenu控制器内的Home控制器。

  • SideMenu控制器

    中实施协议
    protocol SideMenuDelegate: NSObjectProtocol {
        func menuItemSelected(image: UIImage)
    }
    
  • 将委托添加到SideMenu控制器

    weak var delegate: SideMenuDelegate?
    
  • HomeController实例设置为代理

    let homeVC = HomeViewController()
    let sideMenu = SideMenuController()
    sideMenu.delegate = homeVC
    
  • SideMenuDelegate

    中实施HomeViewController协议
    class HomeViewController: UIViewController, SideMenuDelegate {
        func menuItemSelected(image: UIImage) {
            imageView.image = image
        }
    }
    
  • SideMenu通话方式

    中选择项目时
    delegate?.menuItemSelected(image)
    

SideMenuHome控制器应同时在某处创建。无论如何,它可能是AppDelegateMainViewController