2012-02-27 8 views
7

私は、メインビューコントローラとしてUITableViewControllerのMonoTouch iPhoneアプリを持っています。MonoTouch - UITableViewのスクロールを検出します。

私は、テーブルビューは、コードをスクロールしているときを検出しようとしています:

TableViewScrolled(object sender, EventArgs e) { }は私のメソッドが呼び出されている
this.TableView.Scrolled += TableViewScrolled; 

。 しかし何らかの理由でTableViewScrolled()を呼び出すことができません。

誰もこの経験がありますか?

答えて

6

を以前の回答は非常に良い点であり、IMOは答え(コメントではない)であったはずです。

ポイントはあなたの(またはWeakDelegate)をあなたのUITableViewに設定した場合、そのイベントはもう機能しません。

なぜですか?これらのイベントを実装するため、MonoTouchはUIScrollView(親はUITableViewの親)の独自の内部デリゲート型を作成し、(デリゲートの)メソッドをオーバーライドし、それらをより多くのものとして公開します。ナチュラル(.NET) 。

これは、UITableViewのイベントを独自のデリゲートUITableViewDelegateタイプと混在させることはできません(後で前者を上書きするため)。

3

このドキュメントを読む:UIScrollViewDelegateあなたが使用することができます

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


} 

または

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


} 

幸運、上クラエルールさんのコメント@ ネイサン

+1

これらはMonoTouchでUITableView.Scrolledにマップされるメソッドです。なぜ私はthis.TableView.Scrolled + = TableViewScrolledを考えていたのですか?トリックを行う必要があります。しかし、行かない。 :-) – Brett

+3

デリゲートを使用していますか?そうした場合、コールバックは機能しません。コールバックを使用すると、デリゲートは機能しません。どちらかか。 – Krumelur

+1

@NathanこれはScalled()と呼ばれるXamarinに関する質問です。 –

13

私の答えはスクロールのみについては、実際にではなく、なぜなら私は、スクロールイベントによって引き起こされる問題と戦っかなり時間を費やしてきたという事実を、私はここに答える書くことにしました。

だから、私にとっての問題は、そのに加入した後にした

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

UITableViewDataSourceクラスから継承し、私のメソッドのオーバーライド:

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

(呼び出されていないとなりました)動作を停止。それは...明らかに、かなり予想外でした!

だから、私はちょうど代わりに、テーブルビューに存在しないイベントにをサブスクライブするのと同じデータソースデリゲート

public override void Scrolled(UIScrollView scrollView) 

を上書きしなければなりませんでした。

誰かがこのようなトラブルに遭遇しないことを願っています。

+0

あなたのアドバイスをありがとう! – DeeRain

+0

こんにちは私はDialogViewController(Monotouch MTDから)と同じ種類の問題を抱えています。私の場合、スクロールされたイベントの処理が始まると、セルのタップされたすべてのイベントが機能しなくなります。 UITableViewDataSourceはフレームワークによって動的に作成されるため、イベントを処理する代わりにスクロールされたメソッドをどのようにオーバーライドできるかをご存じですか? –

+0

独自のデータソースの実装(オーバーライド)について教えてください。別のオプションは、Windowクラスからすべてのイベントを直接処理することです(必要な場合)。 – Agat

関連する問題