2009-08-10 14 views
5

Chcę zbudować aplikację kakao z listą pozycji bardzo podobnych do listy rzeczy do zrobienia w Item.app (see the screencast). Powstaje pytanie, czy powinno się używaćJak zaimplementować niestandardową listę w Cocoa?

  1. tableview,
  2. CollectionView lub
  3. Webview.

Myślę, że może z nimi współpracować, ale który najlepiej pasuje do poniższych wymagań?

  • mieć listę wpisów -> 1 kolumna & wiele wierszy
  • zmiana kolejności przeciągnij & spadek
  • wybrać pojedynczy wpisy & użyj przycisków dla działań takich jak usuwania
  • otworzyć wpis: wiersz powinien rozwiń, aby wyświetlić więcej pól wprowadzania
  • dostosowany wygląd: zaokrąglone rogi, cień, gradient w tle

Do tej pory moje badania mówią, że TableView ma większość funkcjonalności, ale jest trudniejsze do dostosowania w swoim wyglądzie, CollectionView nie ma oporu & upuść (prawda?), Ale jest łatwy w projektowaniu, a WebView wymagałby wiele wysiłku aby nie zaszkodzić użytkownikowi i nie mogę powiązać mojego modelu bezpośrednio z polami wejściowymi.

Jakie zalety i wady mi brakuje, a co poleciłbyś użyć?

Odpowiedz

4

WebView nie ma sensu. Równie dobrze możesz utworzyć aplikację internetową, jeśli korzystasz z WebView. NSCollectionView jest bardziej dla danych typu grid, takich jak listy telewizyjne na godzinę.

NSTableView jest jedynym, który ma sens w tym przypadku. Zaimplementowałem wszystkie 5 punktorów za pomocą NSTableView bez problemu. Należy rozszerzyć NSTableView i zrobić niestandardowy rysunek dla niestandardowego wyglądu. To najtrudniejsza część.

2
  • otworzyć wpis: rząd powinien rozszerzyć, aby wyświetlić więcej pól wejściowych

Potrzebujesz outline view. Widok tabeli dotyczy płaskich list.

Należy zauważyć, że NSOutlineView jest podklasą NSTableView, więc wszystkie funkcje widoku tabeli działają również w widoku konspektu.

+0

Hm, nie rozszerza wiersz w NSOutlineView po prostu ujawnić więcej "subrows"? Wolałbym zmienić wysokość wierszy i umieścić w niej więcej rzeczy. Czy to ma sens? – Christian

+0

Tak. Możesz faktycznie użyć widoku tabeli i zaimplementować metodę delegatów 'tableView: heightForRow:', do której dodali obsługę w Tiger: http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/ Reference.html # // apple_ref/occ/instm/NSObject/tableView: heightOfRow: –

+1

Potrzebna Ci będzie również niestandardowa komórka, którą możesz przełączać między różnymi stanami rozwinięcia. –

2

Są ludzie, którzy już to zrobili. Jedną z nich, którą z powodzeniem stosowałem, jest Matteo Bertozzi i jest dostępna tutaj: http://th30z.netsons.org/2009/03/cocoa-sidebar-with-badges-take-2/ Masowanie może zająć bit, aby zmusić ją do prawidłowego działania (szczególnie jeśli potrzebujesz złożonego zachowania typu "przeciągnij i upuść"), ale dla podstawowej funkcjonalności , takie jak uzyskiwanie tytułów sekcji i pozycji na liście, działa znakomicie.

Edytuj: To ma come up before i jest częstym pytaniem na liście mailingowej kakao-dev. Here are some other options.

+0

To są dobre zasoby, ale nie sądzę, że Pasek boczny jest tym, o czym tu mówimy. To część "Rzeczywistej treści", rzeczy, w których żyją rzeczywiste todosy. – jbrennan

+0

@jbrennan touch. Zacząłem oglądać połączony screencast, zobaczyłem pasek boczny i założyłem, że tego właśnie chce. Możesz to technicznie zrealizować w dowolnej z opcji, które zadał w pytaniu. Myślę, że powinienem przeczytać to pytanie w całości zanim odpowiem, co? :) –

0

Podchodzę do tego samego problemu w mojej aplikacji (z jedną dużą listą podobną do listy rzeczy do zrobienia) i myślę, że widok tabeli miałby tu wiele sensu.

Sztuką jest, że twoje komórki ("wiersze") rozwijają się po dwukrotnym kliknięciu. To wszystko, co do tej pory zrobiłem.

+0

W jaki sposób zwiększyło się powiększanie na podwójnym kliknięciu? – Christian

+0

Niestety, nie całkiem to jeszcze działało! Więc mógłbym się mylić ... Obecnie mam większe doświadczenie z Cocoa-Touch niż Cocoa. – jbrennan

1

Wystarczy spojrzeć na samą rzeczkę przy użyciu "F-script anywhere".

Użyli oni podklasy NSTableView o nazwie "DetailTableView", która przedstawia skondensowane elementy todo. Zwinięte elementy todo są implementowane za pomocą niestandardowej komórki o nazwie "ToDoCell", ale rozszerzony wygląd, który dostajesz podczas edycji, jest interesujący. W takim przypadku mają niestandardowy widok o nazwie "ToDoEditView", który jest wstawiany jako widok z widoku DetailTableView, gdy jest to wymagane. Podejrzewam, że widok edycji jest tymczasowo dodany jako widok podrzędny w poprawnej lokalizacji, a odpowiadający wiersz widoku tabeli tymczasowo zmienia rozmiar, gdy jest obecny.

Wszystkie dość spekulacyjne .. Chciałbym poznać szczegóły, jak to się stało. To niesamowity interfejs użytkownika.

+0

Dobra robota detektywistyczna. Zapomniałem o F-Script. Warto również sprawdzić, czy jest to zrzut klasy. I dlaczego nie sprawdzić folderu zasobów w pakiecie aplikacji, aby spojrzeć na jego stalówki. To wszystko pomogło mi w przeszłości. – jbrennan

+0

Tak, warto zrobić wszystkie powyższe w odniesieniu do rzeczy .. dla inspiracji, ponieważ jest to tak dobrze zaprojektowana aplikacja. Również ... myślę, że wymóg "otwierania rzędu" najlepiej można zrealizować za pomocą podejścia "wstawić widok" używanego przez rzeczy, ponieważ dałoby to dużą elastyczność, gdyby można było go uruchomić. Oczywiście sztuczka (jak wskazuje jbrennan) polega na tym, że wiersz jest rozwijany, aby zrobić miejsce na widok szczegółów. Nie mam jednak żadnego doświadczenia, żeby to wypróbować. –

Powiązane problemy