2012-04-23 10 views
6

Przenoszę natywną aplikację C-Object do rozwiązania Monotouch.MonoTouch Jak zaimplementować RowSelected dla UITableViewController z komórkami statycznymi

Mam w moim scenorysie tableview, z pewnymi statycznymi komórkami tabeli.

Korzystanie następujący kod Objective-C odebrany wybór z tabeli

- (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; 
} 

Teraz chcę zrobić to samo w MonoTouch, ale nie można dowiedzieć się, jak i wszystkie przykłady znaleźć w internecie , używają DataSource i UITableViewDelegate.

Ale przy użyciu tego podejścia, Moje komórki "statyczne" są usuwane, zastępowane.

To co próbuję

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 Wszelkie sugestie?

+0

nie wiem dość dalej, w jaki sposób są usuwane twoje komórki? Kod, który wkleiłeś, dotyczy działania po wybraniu komórki i masz skomentowany kod, dlaczego go skomentowałeś? –

+0

Skomentowany kod, jest kopią wklejań mojego kodu celu-c, jak przetłumaczyłem go na C#. Nie ma znaczenia dla tego problemu. Nie jestem pewien, dlaczego komórki zostały usunięte. Myślę, że to dlatego, że nie mam wdrożenia metody "numberOfResInSection" i "cellForRowAtIndexPath", które są używane podczas tworzenia tabel z kodu. Nie statycznie ... "MYŚLAM ..." – user1346056

Odpowiedz

7

Myślę, że powinieneś spróbować użyć WeakDelegate, aby to zadziałało.

W swojej drutu kontrolera metodę sporządzania tak:

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

Następnie ustaw TableView.WeakDelegate = this;

Pobaw się z nim, nie może mieć swoje parametry dokładnie prawo itp

+0

Przetestowałem to i okazało się, że ustawienie WeakDelegate spowodowało wyczyszczenie komórek statycznych. Jednak jeśli dodasz metodę RowSelected, z atrybutem Export, do właściciela UITableViewController, otrzymasz oczekiwany wynik. – holmes

+0

Tak więc konfigurowane komórki statyczne muszą ustawić kontroler jako delegata dla 'UITableView'. To, co zrobiłeś, jest prawdopodobnie jedynym sposobem, aby zadziałało z MonoTouch. To jest jedna rzecz, którą chcę wypróbować samodzielnie, nigdy nie używałem storyboardów, ponieważ wymagają one iOS 5. Przechodzimy do punktu, w którym wymaganie iOS 5 może już nie być wielkim problemem. – jonathanpeppers

+0

Rzeczywiście wdrażanie tego, bez słabej delegacji działa. Thx faceci! Oddałbym głos, ale nie mam wystarczającej reputacji, whoehoeee = P – user1346056

Powiązane problemy