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).
Si vous savez pourquoi mon point de vue de la table ne fonctionne pas, il serait grand thx!
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
J'ai ajouté un écran d'impression de mon fichier xib, j'avais déjà une couleur pour v1 ... –
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? –