2012-02-27 22 views
7

Ana görüntüleme denetleyicisi olarak bir UITableViewController olan bir MonoTouch iPhone uygulamasına sahibim.MonoTouch - UITableView kaydırmayı algıla

Ben tableview koduyla kaydırılan ediliyor algılamak için çalışıyorum: TableViewScrolled(object sender, EventArgs e) { } benim yöntem

this.TableView.Scrolled += TableViewScrolled; 

çağrıldığını nerede. Ancak, bir nedenle TableViewScrolled() numaralı telefonu çağırmıyor.

Bu konuda herhangi bir deneyimi var mı?

cevap

6

önceki cevap çok iyi bir noktaya işaret ediyor ve IMO bir cevap olmalıydı (bir yorum değil).

Sorun şu ki, Delegate (veya WeakDelegate) ürününüzün UITableView ürününüze ayarlanmışsa, artık olay artık çalışmayacaktır.

Neden? Bu olayları uygulamak için MonoTouch, UIScrollView (UITableView üst) için kendi iç delege türü oluşturur (burada temsilci) yöntemlerini geçersiz kılar ve bunları daha fazla doğal (.NET'te), tür içinde .

Bu etkili bir şekilde, UITableView olaylarını kendi delege UITableViewDelegate türünüzle (daha sonra eski olanı geçersiz kılacak olduğundan) birleştiremeyeceğiniz anlamına gelir.

3

bu belgeleri okuyun: UIScrollViewDelegate

Sen kullanabilirsiniz:

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


} 

veya

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


} 

İyi şanslar, Nathan

tarihinde Krumelur yorumuna @
+1

MonoTouch'da UITableView.Scrolled ile eşlenen yöntemler bunlar; Neden böyle düşündüğünü anladım.TableView.Scrolled + = TableViewScrolled; hile yapmalı. Ama gitme. :-) – Brett

+3

Temsilci kullanıyor musunuz? Eğer yaparsanız, geri aramalar çalışmaz. Geri aramaları kullanırsanız, temsilci çalışmaz. Ya ya da. – Krumelur

+1

@Nathan Bu, Scrolled() adlı Xamarin hakkında bir sorudur. –

13

Benim cevabım kaydırma hakkında ama çünkü kaydırma olayı nedeniyle bir sorun ile mücadele oldukça saattegeçirdim gerçeği değil aslında sadece , ben burada cevap yazmaya karar verdik.

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

UITableViewDataSource sınıfından miras benim overriden yöntemleri:

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

(aramadı oldu) çalışmayı durdurdu

Yani, benim için sorun abone sonra olmasıydı. Hangisi ... belli ki, beklenmedik bir şeydi!

Yani, sadece yerine tablo görünümünde etkinliğe n var olan abone aynı veri kaynağı temsilci

public override void Scrolled(UIScrollView scrollView) 

geçersiz gerekiyordu.

İnşallah birisi böyle bir belaya bulaşmaz!

+0

Tavsiyeniz için teşekkür ederiz! – DeeRain

+0

Merhaba Bir DialogViewController (Monotouch MTD) ile aynı tür bir sorun var. Benim durumumda, kaydırılan olayı ele almaya başladığım zaman, hücrelerimdeki tüm tıklanan olay çalışmayı durdurur. UITableViewDataSource, dinamik olarak çerçeve tarafından oluşturulduğundan, olayı işlemek yerine Kaydırılan yöntemini nasıl geçersiz kılabileceğimi biliyor musunuz? –

+0

Kendi veri kaynağınızı uygulamak (geçersiz kılmak) nedir? Diğer bir seçenek, tüm olayları doğrudan (doğrudan) Window sınıfından ele almaktır. – Agat