2012-05-04 15 views
8

Kocham MonoTouch do tej pory, ale znajdź dokumentację i próbki brakujące, gdy miniesz kilka lekcji dla początkujących.Zapełnianie prostego UITableView w MonoTouch z UITableViewDataSource - jak używać UITableViewDataSource

Walczę z prostą koncepcją zapełniania prostego UITableView w MonoTouch. Widziałem przykłady robienia tego z komórkami niestandardowymi i obszernym dostosowywaniem listy przy użyciu różnych informacji, ale szukam jedynie minimum, jak osiągnąć tę prostą rzecz. Jestem profesjonalnym programistą .NET i bardzo nowością w systemie iOS, więc wciąż pakuję się w głowę, jak to działa.

Po prostu chcę następujące. Tworzenie listy pozycji Przypisz listę elementów do UITableView, aby umożliwić użytkownikowi przewijanie listy. Szukam bardzo prostego przykładu.

Największa rzecz, z którą walczę, to utworzenie obiektu UITableViewDataSource. Jest abstrakcyjny, więc nie mogę utworzyć jego przykładu. Mógłbym stworzyć własną klasę, która ją dziedziczy, ale szukam konkretnej implementacji w ramach, której można użyć bez konieczności tworzenia własnego. Czy jestem zbyt zepsuty przez .NET i muszę stworzyć dla niego nową klasę, czy też istnieje ona gdzieś w Ramach i po prostu nie mogę jej znaleźć?

[Odpowiedź tutaj] znalazłem odpowiedź, ale StackOverflow nie pozwoli mi odpowiedzieć na moje własne pytanie z mniej niż 100 reputacji lub chyba czekać 8 godzin których nie jestem w stanie zrobić. Odpowiedz poniżej:

Utworzono następującą klasę, która dziedziczy UITableViewSource. Jest to wymóg, aby zrobić to w ten sposób. GetCell kontroluje sposób renderowania komórki na stole.

Utwórz wystąpienie tego i podaj listę ciągów do wypełnienia.

Ten przykład pochodzi z (I zmodyfikowane go nieznacznie) książkę czytam z Wrox Press - „Profesjonalne iPhone Programowanie z MonoTouch i .NET C#”

public class TableViewSource : UITableViewSource 
{ 
    private List<string> rows; 

    public TableViewSource (List<string> list) 
    { 
      rows = list; 
    } 

    public override int RowsInSection (UITableView tableview, int section) 
    { 
     return rows.Count; 
    } 

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
    { 
     UITableViewCell cell = new UITableViewCell(UITableViewCellStyle.Default,"mycell"); 
     cell.TextLabel.Text = rows[indexPath.Row]; 
     return cell; 
    } 
} 

Umieść następujący kod w viewDidLoad na ekranie .

var list = new List<String>() 
{ 
    "San Francisco",  
    "Buenos Aires", 
    "São Paulo" 
}; 

TableViewSource tableData = new TableViewSource(list); 
this.tblTrips.Source = tableData; 

To daje mi to czego szukam, bez konieczności głębokiego nurkowania w MonoTouch.Dialog

Odpowiedz

2

UITableView, i powiązane typy delegata i źródła danych, nie jest bardzo przyjazny API - jeszcze mniej typowe. NET developer. Są chwile, kiedy jest to potrzebne, ale w większości przypadków będziesz chciał użyć czegoś prostszego.

Tworzenie listy pozycji Przypisz listę elementów do UITableView, aby umożliwić użytkownikowi przewijanie listy. Szukam bardzo prostego przykładu.

To wydaje się pasować do celu MonoTouch.Dialog. Zespół jest teraz dostarczany z MonoTouch, ale można znaleźć sample source code na github.

Strona z dokumentacją Xamarin ma również tutorial do korzystania z MonoTouch.Dialog i ładny video jest również dostępna.

+0

Doceniam poradę i potencjalnie zajrzę w to w przyszłości.Ale, szczerze mówiąc, szukałem sposobu użycia istniejących obiektów w mono i znalazłem przykład, który pozwolił mi to zrobić w książce, którą czytam. Zobacz moją odpowiedź poniżej. Teraz, gdy rozumiem, jak to działa i jak używać GetCell do renderowania komórki i że jest wymagane, aby stworzyć moją własną implementację UITableViewSource, myślę, że jestem na dobrej drodze, aby to zrozumieć. – user1060500

+1

MT.Dialog to świetne narzędzie, ale zgadzam się, że naprawdę trzeba zrozumieć, jak natywnie korzystać z TableViews - są one bardzo istotną częścią interfejsu iOS. Jestem zaskoczony, że Xamarin nie ma dobrej próbki tego w swojej bibliotece dokumentów. – Jason

+0

Ponieważ nie mogę odpowiedzieć na moje własne pytanie z mniej niż 100 reputacją, to pytanie pozostanie bez odpowiedzi. Szkoda, bo moja odpowiedź naprawdę pomogłaby społeczności. Zapomnę o tym odpowiedzieć za 8 godzin, kiedy będę mógł to zrobić zgodnie z zasadami StackOverflow. [Zdecydowanie nie zgadzam się z tą zasadą] - Postawię odpowiedź jako część pytania do obejścia tego ... – user1060500

Powiązane problemy