[OSX] @IBInspectable qui reste à  la valeur par défaut.

J'ai ce bout de code ci dans une sous classe d'un NSViewController : 



/// Tell the controller if it should animate transiton to next page.
@IBInspectable public var forwardTransition: Bool = true
/// Tell the controller if it should animate transiton to previous page.
@IBInspectable public var backwardTransition: Bool = true
/// Tell the controller if it should animate transiton back to the first page.
@IBInspectable public var homeTransition: Bool = true
/// Tell the controller if it should embed a navigation view in each page.
@IBInspectable public var useNavigation: Bool = true
/// The navigation controller's storyboard ID.
///
/// - note: If `nil` the default navigation controller will be used.
@IBInspectable public var navigationId: String?

Donc, et selon tout vraisemblance, je peux modifier ces valeurs directement dans Interface Builder.


Seulement que je le fasse ou pas les valeurs sont toujours celles par default. 


 


J'ai testé tout ce qui me passait par la tête comme d'initialiser les valeurs dans l'init, ça ne fonctionne pas... J'ai mis des didSet avec un print de la valeur et bizarrement c'est la valeur par default qui s'affiche à  chaque fois.


 


J'ai testé avec Xcode 7.2.1 et 7.3 beta 2, la beta 3 est en DL je vais bien voir mais j'y crois pas trop.


 


Alors bug d'Xcode, erreur de ma part ou @IBInspectable qui ne fonctionne que pour les NSView (dans ce cas ils pourraient le dire...) ?


Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur

    Je ne comprend pas ce que tu veux dire mais ce code suivant marche :



    @IBDesignable
    public class TestView : NSView
    {
    @IBInspectable public var isGood: Bool = true

    override public func drawRect(dirtyRect: NSRect)
    {
    let path = NSBezierPath(rect: CGRect(x: 10, y: 10, width: 10, height: 10))

    if self.isGood
    {
    NSColor.blackColor().set()
    }
    else
    {
    NSColor.redColor().set()
    }

    path.stroke()
    }
    }
  • Oui mais là  c'est une subclass de NSViewController... 


    Visiblement internet a l'air d'accord de dire que c'est impossible de le faire avec des subclasses d'UIViewController. J'imagine que c'est pareil pour NSViewController mais les User Defined Defined Runtime Attributes ne fonctionnent pas non plus.

  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2016 modifié #4
  • samirsamir Membre
    février 2016 modifié #5

    Hello,


     


    Je ne vois pas de raison pour que ça ne marche pas. Comment tu crées ton controller ?


    (Il faudra que tu le crées via interface builder). Fais un test avec un storyboard incluant un objet controller. 


     


    Edit :


     


    Oui tu as bien raison, j'ai mal compris ta question. Je viens de tester sur un UIViewController et j'ai le même cas que toi. 


     


    Edit 2:


     


    ça a marché finalement sur un UIViewController. 


  • Joanna CarterJoanna Carter Membre, Modérateur

    Samir, tu as raison. Je viens de ajouter un @IBInspectable var dans un UIViewController subclass, qui j'ai marqué @IBDesignable et, hey presto ! ça marche !!!


  • Si aucun de vous 2 n'a fait plus que ce que Joanna a expliqué dans son dernier post alors je peux vous certifier que ça ne fonctionne pas avec NSViewController et cette méthode.


  • Désolé je ne comprend pas ton message :). ça ne marche pas ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2016 modifié #9
    ça marche ici. Tu as marqué la class comme @IBDesignable ?
  • J'ai testé avec NSViewController aussi et je ne vois aucun souci. Je suis sous Xcode 7.2


  • Non ça ne fonctionne pas pourtant j'ai fait pareil...


    Vous le faites avec des storyboards sur OSX ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    Tu peux nous montrer ton code ?
  • Oui je peux en montrer une partie (il sera open-source mais il est long)



    import Cocoa

    @available(OSX 10.10, *)
    @IBDesignable public class PagedViewCollectionController: NSTabViewController {
    /// The navigation controller's storyboard ID.
    ///
    /// Use this property in order to load the page navigation controller you want to ambed in each page view. If `navigationController` is set this property will be ignored.
    /// - note: Setting this property will embed a page navigation controller regardless the value of `usePageNavigationController`.
    @IBInspectable public var navigationId: String? {
    didSet { manageNavigationViewController() }
    }
    /// The name of the storyboard containing the navigation controller.
    ///
    /// If `nil` the page navigation controller will try to be loaded from the receiver's storyboard.
    @IBInspectable public var navigationStorybardId: String? {
    didSet { manageNavigationViewController() }
    }
    }

    Il voilà  les lignes qui nous intéressent. Le code m'a l'air correct et compile sans warning. Rien dans la console non plus...


    Avec la delegation j'ai contourné le problème mais si je pouvais au moins avoir ces 2 propriétés accessibles depuis IB ça serait cool. Sinon l'utilisateur aura à  écrire un delegate avec 3 lignes dedans. 


     


    Quoiqu'il en soit ça ressemble à  un énième bug de Xcode tout ça...


  • J'ai aucun souci avec ton code su ma machine. Xcode Version 7.2 (7C68)


  • PyrohPyroh Membre
    février 2016 modifié #15

    J'ai Xcode 7.2.1 ici.


    J'ai créé un nouveau storyboard, avec des trucs tout neufs mais ça reste désespérément à  nil...


    Je vais finir l'implémentation, tout taper dans un beau framework et retester avec projet un from scratch. 


     


    Le pire c'est que c'est bien renseigné dans le code du storyboard mais Xcode doit encore faire des siennes. Si seulement ils mettaient autant d'énergie dans les dev tools osx que ceux d'iOS...


Connectez-vous ou Inscrivez-vous pour répondre.