2015-09-14 3 views
1

J'ai un problème, j'ai un contrôleur, et dans viewdidload, j'essaie de charger une sous-vue créée à partir d'un fichier xib. Ma sous-vue "personnalisée" est bien ajoutée à mon premier contrôleur mais la table ne répond pas ... je veux dire qu'elle ne défile pas, et quand je clique dessus, rien ne se passe ... (je n'ai pas implémenté encore la méthode pour déclencher une action quand on clique sur une cellule, mais celle-ci n'est pas mise en surbrillance lorsqu'on clique dessus).SWIFT TableView ne répond pas

Voici le code:



class FirstViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

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

     let v1 = MyViewTest(frame: CGRectZero) 

     v1.tableView.dataSource = self 
     v1.tableView.delegate = self 

     self.view.addSubview(v1) 


    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     //datasource method returning the what cell contains 
     let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "MyTestCell") 
     //reusing the previous scrolled cells from table view(if any) 
     //cell.textLabel?.text = array[indexPath.row] 
     cell.textLabel?.text = "test" 
     //passing each elements of the array to cell 
     return cell 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     //datasource method returning no. of rows 
     return 14 
    } 


} 

ici le code MyViewTest



class MyViewTest: UIView { 

    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var tableView: UITableView! 


    var view:UIView! 

    let nibName:String = "MyViewTest" 

    override init(frame: CGRect) { 
     super.init(frame:frame) 
     setup() 
    } 

    required init(coder aDecoder: NSCoder) { 
     //fatalError("init(coder:) has not been implemented") 
     super.init(coder: aDecoder) 
     setup() 
    } 


    func setup() { 
     view = loadViewFromNib() 

     let screenSize: CGRect = UIScreen.mainScreen().bounds 
     let sWidth = screenSize.width 
     let sHeight = screenSize.height 
     let xPos = sWidth/2-(view.bounds.width/2) 
     let yPos = sHeight/2-(view.bounds.height/2) 

     view.frame = CGRectMake(xPos, yPos, view.bounds.width, view.bounds.height) 

     addSubview(view) 
    } 

    func loadViewFromNib() -> UIView { 
     let bundle = NSBundle(forClass: self.dynamicType) 
     let nib = UINib(nibName: nibName, bundle: bundle) 
     let mview = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 

     return mview 
    } 


} 

dans le fichier xib, je ne dispose que d'une vue avec une étiquette et mon tableview dans le fichier xib est associé. avec sa classe (en identifiant).

enter image description here

Si vous savez pourquoi mon point de vue de la table ne fonctionne pas, il serait grand thx!

+0

On dirait que v1 peut avoir toutes les attentions car il est sur le dessus de la table. Définissez l'arrière-plan de v1 sur une couleur (ou utilisez le débogueur de vue) et vérifiez cela. – JDM

+0

J'ai ajouté un écran d'impression de mon fichier xib, j'avais déjà une couleur pour v1 ... –

+0

Vous semblez définir le cadre de MyTestView à CGRectZero. Vous ajoutez ensuite votre table en tant que sous-vue de cette vue avec la taille d'image configurée. Comme MyTestView a 0 largeur et hauteur et la valeur par défaut pour une vue est de ne pas couper les sous-vues, j'imagine que vous pouvez voir la table mais ne cliquez pas dessus. Essayez de définir le cadre de votre MyTestView à la taille de l'écran? –

Répondre

0

Vous semblez définir le cadre de la MyTestView à CGRectZero.

Vous ajoutez ensuite votre table en tant que sous-vue de cette vue avec la taille d'image configurée. Comme MyTestView a 0 largeur et hauteur et la valeur par défaut pour une vue est de ne pas couper les sous-vues, j'imagine que vous pouvez voir la table mais ne cliquez pas dessus.

Essayez de définir le cadre de votre MyTestView à la taille de l'écran?

0

Le problème se produit car j'instancie mon MyViewTest avec CGRectZero. Si j'utilise un CGRectMake par exemple avec une largeur et une hauteur réelles, cela fonctionne très bien.

Post Voir rory McKinnel juste au-dessus pour plus de détails :-)