2012-04-23 17 views
6

Bir Monotouch çözümüne yerel bir hedef-C uygulaması taşıyorum.MonoTouch Statik Hücreler ile bir UITableViewController için RowSelected nasıl uygulanır

Benim storyboard'umda bazı statik tablo hücreleri ile bir tablo görünümü var. Aşağıdaki amaç-c kodunu kullanarak

bir

- (void) tableView:(UITableView *) aTableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath 
{  // remove the row highlight 
    [aTableView deselectRowAtIndexPath:indexPath animated:YES]; 

    switch(indexPath.row) { 
     case 0: [self callWebsite]; break; 
     case 1: [self sendEmail]; break; 
     case 2: [self makePhoneCall]; break; 
    } 

    return; 
} 

Şimdi MonoTouch aynı yapmak istiyorum tablodan bir seçim aldım, ancak net nasıl bulduğunu ve tüm örnekler bulamıyor DataSource ve UITableViewDelegate kullanıyor.

Ancak bu yaklaşımı kullanırken, "Statik" hücrelerim kaldırılır.

Bu benim

public partial class ContactViewController : UITableViewController 
{ 
    public ContactViewController (IntPtr handle) : base (handle) 
    { 
     this.TableView.Delegate = new CustomTableViewDelegate(); 
    } 
} 

public class CustomTableViewDelegate : UITableViewDelegate 
{ 
    public override void RowSelected (UITableView tableView, NSIndexPath indexPath) 
    { 
     // Remove the row highlight 
     RowDeselected(tableView, indexPath); 

     /* 
      // Is this section our "button" section? 
      switch(indexPath.row) { 
       case 0: [self callWebsite]; break; 
       case 1: [self sendEmail]; break; 
       case 2: [self makePhoneCall]; break; 
      } 
     */ 

     Console.WriteLine("Do something meaningfull."); 
    } 
} 

Somebody herhangi bir öneri çalışıyorum nedir?

+0

benim parametrelere sahip olmayabilir, TableView.WeakDelegate = this;

Play çevresinde set oldukça izleyin, hücreleriniz nasıl kaldırılır? Hücre seçildiğinde, yapıştırdığınız kod eylem için eklenmiş ve kodunuz hakkında yorum yazdınız, neden yorum yazdınız? –

+0

Yorumlanan kod, C# 'ya dönüştürdüğüm için benim c-code kodumun bir kopyala yapıştırmasıdır. Bu konu için herhangi bir önemi yoktur. Hücrelerin neden kaldırıldığından emin değilim. Bunun nedeni koddan tablo oluştururken kullanılan 'numberOfRowsInSection' ve 'cellForRowAtIndexPath' yöntemlerinin hiçbir uygulamasının olmamasıdır. Statik olarak değil ... "DÜŞÜNÜYORUM ..." – user1346056

cevap

7

Bu işi yapmak için WeakDelegate kullanmayı deneyin. Denetleyiciniz tel yukarı şöyle bir yöntem olarak

:

[Export("tableView:didSelectRowAtIndexPath:")] 
public void RowSelected (UITableView tableView, NSIndexPath indexPath) 
{ 
    //Your code here 
} 

Sonra bilmiyorum, vb tam olarak doğru

+0

Bunu test ettim ve WeakDelegate ayarının statik hücrelerin temizlenmesine neden olduğunu buldum. Ancak, RowSelected yöntemini, Export özniteliği ile, sahip UITableViewController'a eklerseniz, beklenen sonucu alırsınız. – holmes

+0

Yani, kurduğunuz statik hücreler denetleyiciyi 'UITableView' için temsilci olarak ayarlamalıdır. Yaptığınız şey, MonoTouch ile çalışmasını sağlamanın tek yolu. Bu, kendimi denemek istediğim bir şeydir, iOS 5 gerektirdiğinden beri hiç hikaye panosu kullanmıyorum. IOS 5'i gerektiren yerlerde artık çok büyük bir sorun olmayacak. – jonathanpeppers

+0

Gerçekten de bunu uygulamak, zayıf delege ödevi olmadan çalışır. Teşekkürler millet! Bir oy verdim, ama yeterli bir itibarım yok, whoehoeee = P – user1346056