2016-02-28 2 views
0

Dans mon ViewController, j'ai deux UIImageView qui ont une connexion IBOutlet à l'interface utilisateur:créer IBOutlet/IBAction et se connecter avec l'interface utilisateur dans une classe personnalisée

class ViewController: UIViewController { 
    @IBOutlet weak var img1: UIImageView! 
    @IBOutlet weak var img2: UIImageView! 
    ... 

Maintenant, je veux factoriser mon projet d'avoir un dédié La classe ImageManager gère les images. Ainsi, le ViewController devient comme ceci:

class ViewController: UIViewController { 
    var imgMgr: ImageManager! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     imgMgr = ImageManager() 
    } 
} 

Je veux la classe ImageManager de déclarer les deux UIMageViews de la même manière que dans ViewController et faire le lien avec l'interface utilisateur IBOutlet, mais ressemble à ça ne fonctionne pas dans ce chemin:

class ImageManager : NSObject { 
    @IBOutlet weak var img1: UIImageView! 
    @IBOutlet weak var img2: UIImageView! 
    ... 
} 

Est-il possible de faire une classe personnalisée tenant la IBOutlet & IBAction qui se connecte à l'interface des composants de l'interface utilisateur de constructeur (au lieu de le faire dans ViewController)?

+0

Cela ne fonctionne pas car vous cassez le modèle MVC. Vous créez un contrôleur qui n'est pas une instance de 'UIViewController' et c'est quand vous commencez à avoir des problèmes. Voulez-vous que votre manager gère une partie de l'écran? Ensuite, il devrait être un contrôleur de vue enfant. Devrait-il juste gérer les données? Ensuite, il devrait être une classe de modèle et ne devrait pas posséder les vues de l'image. – Sulthan

Répondre

0

Je ne pense pas que vous devriez le faire. Vous devez juste gérer vos images dans votre classe UIImage personnalisée en utilisant par exemple:

//inside the function awakFromNib 
    self.layer.cornerRadius = 5.0 //will make all the images' corner radius of elements assigned to this custom class rounded 
    self.clipsToBounds = true 

Ensuite, vous traînera les sorties d'image, comme d'habitude au contrôleur de vue, mais au lieu de définir sa classe « UIImage », réglez-le le nom de la classe personnalisée

@IBOutlet weak var someImg: CustomImgClass! 
0
  1. Créer une sous-classe ImageManager de UIView.
  2. Créez une nouvelle vue sous votre ViewController et changez son nom de classe en ImageManager.
  3. Faites glisser deux UIImageViews vers votre ImageManager.
  4. Consultez les Outlets de ImageManager View et connectez-les à la vue nouvellement créée.
  5. À votre avisWillAppear vient d'ajouter ImageManager en tant que sous-vue.