2012-02-27 4 views
7

J'ai une application iPhone MonoTouch qui a un UITableViewController comme contrôleur principal.MonoTouch - Détecter le défilement UITableView

Je suis en train de détecter quand le tableview est défilée avec le code:

this.TableView.Scrolled += TableViewScrolled; 

TableViewScrolled(object sender, EventArgs e) { } est ma méthode appelée. Mais il ne parvient pas à appeler le TableViewScrolled() pour une raison quelconque.

Quelqu'un a-t-il une expérience avec ceci?

Répondre

6

@ commentaire de Krumelur sur la réponse précédente fait un très bon point et OMI aurait dû être une réponse (pas un commentaire).

Le point est que si vous définissez un Delegate (ou WeakDelegate) à votre UITableView alors ses événements ne fonctionneront plus.

Pourquoi? car pour implémenter ces événements MonoTouch crée son propre type de délégué interne pour UIScrollView (le parent de UITableView) où il remplace les méthodes (du délégué) et les expose comme, plus naturel (dans .NET), les événements dans le type .

Cela signifie en fait que vous ne pouvez pas mélanger ces événements UITableView avec votre propre type de délégué UITableViewDelegate (puisque le dernier remplacera le précédent).

3

cette documentation: UIScrollViewDelegate

Vous pouvez utiliser:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView { 


} 

ou

- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView { 


} 

Bonne chance, Nathan

+1

Ce sont les méthodes qui sont mappées dans MonoTouch à UITableView.Scrolled; Ce qui était pourquoi je pensais this.TableView.Scrolled + = TableViewScrolled; devrait faire l'affaire. Mais pas d'aller. :-) – Brett

+3

Utilisez-vous le délégué? Si vous le faites, les rappels ne fonctionnent pas. Si vous utilisez les rappels, le délégué ne fonctionne pas. C'est soit ou. – Krumelur

+1

@Nathan Ceci est une question à propos de Xamarin, où elle s'appelle Scrolled(). –

13

Ma réponse est pas vraiment seulement le défilement, mais à cause du fait que j'ai passé une heure assez lutte contre un problème causé par l'événement de défilement, j'ai décidé d'écrire réponse ici.

Ainsi, le problème pour moi est que si vous êtes abonné à:

this.myTableView.Scrolled += (sender, args) => 
    { 
     ... 
    }; 

mes méthodes de outrepassée héritées de la classe UITableViewDataSource:

public override UIView GetViewForHeader(UITableView tableView, int section) 
    public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath) 

a cessé de travailler (est devenu pas appelé). Ce qui était ... évidemment, assez inattendu!

Alors, je viens dû passer outre

public override void Scrolled(UIScrollView scrollView) 

dans le même délégué au lieu de source de données vous inscrivant à inexistante événement dans la vue table.

J'espère que quelqu'un ne va pas avoir de tels problèmes!

+0

Merci pour vos conseils! – DeeRain

+0

Salut j'ai le même genre de problème avec un DialogViewController (de Monotouch MTD). Dans mon cas, dès que je commence à gérer l'événement défilant, tous les événements sur mes cellules ne fonctionnent plus. Comme UITableViewDataSource est créé dynamiquement par le framework, savez-vous comment je peux remplacer la méthode Scrolled au lieu de gérer l'événement. –

+0

Qu'en est-il de la mise en œuvre (dépassement) de votre propre source de données? Une autre option consiste à gérer (si nécessaire) tous les événements directement à partir de la classe Window. – Agat

Questions connexes