将Viewcontroller作为参数传递

时间:2016-05-06 06:49:44

标签: ios swift uiviewcontroller slcomposeviewcontroller

我正在上课。这个类将在我的项目中多次使用。所以我在那里定义了许多方法,其中有一个参数指定了参考UIViewcontroller,我希望在其中提供类似SLComposeViewController的东西。我只想问一个问题是正常传递UIVIewcontroller作为参数不建议将UIVIewController作为参数传递

// ViewController Class
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func shareFacebook(sender: UIButton) {
let sharePanelObj = SharePanel()
sharePanelObj.facebookShare(self)
    }

    @IBAction func shareTwitter(sender: UIButton) {
    }
}


// Reusable Base Class
class SharePanel: NSObject {

    func facebookShare (refrenceViewController:UIViewController) -> () {
        if SLComposeViewController.isAvailableForServiceType(SLServiceTypeFacebook) {
            let fbShare:SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)

            refrenceViewController.presentViewController(fbShare, animated: true, completion: nil)

        } else {
            let alert = UIAlertController(title: "Accounts", message: "Please login to a Facebook account to share.", preferredStyle: UIAlertControllerStyle.Alert)

            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
            refrenceViewController.presentViewController(alert, animated: true, completion: nil)
        }
    }
}

2 个答案:

答案 0 :(得分:3)

我认为将viewviewController作为此参数的参数发送时没有任何问题,但将这些方法extensions添加到UIViewController可能会更清晰然后你可以在self而不是参数上行动。

如果您保留对视图控制器的引用,则需要考虑的一件事是内存管理。这可能会加剧和卸载通常依赖于设置视图的视图。

答案 1 :(得分:3)

1)创建一个名为BaseViewController的控制器。

2)编写要在其他控制器中重用的所有常用方法。

3)然后将此基本视图控制器作为要使用其方法的视图控制器的父视图控制器。等,

class HomeViewController: BaseViewController
{

}

您可以将此基类提供给要重用该方法的所有控制器。 这样你就可以实现这个基类概念。希望这对你有所帮助。