2016-05-06 8 views
2

Ich mache eine Klasse zum Teilen. Diese Klasse wird in meinem Projekt viele Male verwendet. Also habe ich dort viele Methoden mit einem Parameter definiert, der refrence UIViewcontroller angibt, auf dem ich so etwas wie SLComposeViewController darstellen möchte. Ich möchte nur eine Sache fragen, dass es normal ist, einen UIVIewcontroller als Parameter oder zu übergeben, es wird nicht empfohlen, UIVIewController als Parameter zu übergeben.Pass Viewcontroller als Parameter

// 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

Zeigen Sie den Code, der erklärt, was Sie tun und warum Sie es weitergeben. Ist es ein Controller, der sich selbst übergibt, damit etwas von ihm präsentiert werden kann? – Wain

+0

Möchten Sie eine Basisklasse für eine Anwendung erstellen, die für den Aufruf derselben Methode in einem anderen Controller nützlich sein kann. so wie das? –

Antwort

3

Ich sehe keine Probleme mit Ihrem view oder viewController als Parameter für diese Anwendung zu senden, aber es könnte sauberer sein, diese Methoden als extensions-UIViewController hinzuzufügen und die dann können Sie nur wirken auf self statt der Parameter.

Eine Sache zu beachten, könnte die Speicherverwaltung sein, wenn Sie einen Verweis auf den View-Controller behalten. Das kann ein wenig mit dem Laden und Entladen der Ansichten verschmelzen, auf die man oft angewiesen ist, um die Ansichten einzurichten.

+0

Ja Erweiterung hinzufügen wird sauberer sein. Vielen Dank :) – ankit

3

1) Erstellen Sie einen Controller mit dem Namen BaseViewController.

2) Schreiben Sie alle gängigen Methoden, die Sie in anderen Controller wiederverwenden möchten.

3) Geben Sie dann diesen Basisansicht-Controller als übergeordneten Ansichtscontroller für den Ansichtscontroller an, für den Sie die Methoden verwenden möchten. wie,

können Sie diese Basisklasse an alle Controller geben, wo Sie diese Methoden wiederverwenden möchten. Auf diese Weise können Sie dieses Basisklassenkonzept erreichen. Hoffe, das wird dir helfen.