2016-02-14 1 views
1

J'ai un TableView intégré dans NavigationController (et qui est intégré dans un contrôleur TabBar). J'ai un bouton de nom d'utilisateur dans chaque cellule qui se rattache au profil de l'utilisateur.Bogues de RefreshControl d'abord Cell de TableView, après avoir utilisé Retour sur NavBar

enter image description here

Cependant après avoir frappé « retour » sur la barre de page du profil de navigation, et se redirigés vers tableview, il semble que je buggé quelque chose.

enter image description here

enter image description here

Et si je tire à nouveau, il refreshs mais cette fois, le nom d'utilisateur de la ligne supérieure devient cliquables tandis que d'autres lignes fonctionnent comme prévu.

Veuillez noter que j'appelle self.theRefreshControl = UIRefreshControl() dans viewDidLoad dans tableView mais je ne suis pas sûr si elle est ou ne s'appelle pas, après avoir utilisé le bouton Retour.

Veuillez noter que j'effectue la liaison avec prepareForSegue.


Pour conclure

  • Si je vais à la page de notifications et essayez nom d'utilisateur en cliquant, bouton nom d'utilisateur clic et Segue fonctionne

  • Si je vais aux notifications, et tirer le rafraîchissement, bouton d'utilisateur dans la première rangée ne fonctionne pas

  • Si je vais à la notificati ons et ne pas faire d'actualisation, les boutons d'utilisateur segrés et back fonctionne (donc il ne bug pas).

  • Si j'accède aux notifications et que j'appuie sur pour actualiser, l'icône refreshControl apparaît et disparaît, mais maintenant, il ne me laisse pas cliquer sur le bouton du nom d'utilisateur sur la rangée supérieure.

  • Si je me rafraîchis sur les notifications, il ne me laisse pas cliquer sur le nom d'utilisateur dans la rangée supérieure. Si je clique sur le deuxième nom d'utilisateur dans la deuxième cellule, il segues au profil de l'utilisateur, mais lorsque je clique sur le bouton Retour, il bogues comme celui-ci:

enter image description here

code dans viewDidLoad():

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.theRefreshControl = UIRefreshControl() 
    self.theRefreshControl.attributedTitle = NSAttributedString(string: "Pull to refresh") 
    self.theRefreshControl.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged) 
    self.tableView.addSubview(theRefreshControl) 
} 

func refresh(sender: AnyObject) { 
    if isFirstLoad == false { 
     currentPage = 1 
     getStuff() 
    } 

    self.theRefreshControl.endRefreshing() 
} 

J'ai aussi essayé d'ajouter self.tableView.backgroundView = refreshControl ci-dessus et ci-dessous self.tableView.addSubview(theRefreshControl); et aussi essayé de remplacer self.tableView.addSubview(theRefreshControl) avec self.tableView.backgroundView = refreshControl mais malheureusement pas de chance

+0

Cela fonctionne bien avant le segue? – Quantaliinuxite

+0

Oui, le bouton du nom d'utilisateur fonctionne correctement avant la connexion. Je viens de réaliser que si je vais à cette page, et ne tire pas pour rafraîchir, ça marche bien .. Cependant dès que je décroche (donc déclencher l'actualisation), alors il ne parvient pas à refaire la segue sur le bouton username. – senty

+0

http://stackoverflow.com/questions/24475792/how-to-use-pull-to-refresh-in-swift –

Répondre

2

La façon dont vous devez instancier le refreshControl est comme ceci:

override func viewDidLoad() { 
    let refreshControl = UIRefreshControl() 
    refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged) 
    tableView.backgroundView = refreshControl // <- THIS!!! 
} 

comme indiqué dans this answer.

Je pense que votre refreshControl est en face de vos cellules, donc si cette procédure ne fonctionne pas, essayez ceci: tableView.sendSubviewToBack(theRefreshControl) dans viewDidLoad

EDIT: Depuis tableView.sendSubviewToBack(theRefreshControl) était la solution, envisager le dépôt d'un bug Apple, puisque cela devrait se produire automatiquement lorsque vous définissez le refreshControl comme tableView.backgroundView

+0

La mine est assez similaire à ceci, excepté la ligne 'tableView.backgroundView = refreshControl'. (Veuillez vérifier ma réponse mise à jour, j'ai juste ajouté mon code dans ViewDidLoad). J'ai essayé d'ajouter 'tableView.backgroundView = refreshControl' avant et après' self.tableView.addSubview (theRefreshControl) 'mais malheureusement, pas de chance – senty

+0

Vous devez supprimer' self.tableView.addSubview: '. Aussi, appelez-vous 'endRefreshing:'? – Quantaliinuxite

+0

Oui, j'appelle. 'self.theRefreshControl.endRefreshing()'. J'ajoute mon code dans la question. Juste une seconde. – senty