Jak mogę ustawić UITableView na styl zgrupowany


91

Mam UITableViewControllerpodklasę z sekcjami. Sekcje są wyświetlane w domyślnym stylu (bez zaokrąglonych rogów). Jak ustawić styl TableView na zgrupowany w kodzie? Nie używam do tego programu Interface Builder, więc potrzebuję czegoś takiego

[self.tableView setGroupedStyle]

Szukałem na Stack Overflow, ale nie mogłem znaleźć odpowiedzi.


Wersja
szybka

Odpowiedzi:


108

Jeśli rozumiem, co masz na myśli, musisz zainicjować swój kontroler w tym stylu. Coś jak:

myTVContoller = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];

3
Jak stwierdzono, nie jest to właściwość, którą można zmienić. Jedna grupa zawsze zgrupowana.
Corey Floyd

To nie jest prawidłowa odpowiedź, nie rozwiązuje problemu posiadania podklasy UITableViewController. Jeśli dziedziczysz UITableViewController, musisz przesłonić konstruktora, a nie tworzyć innego UITableView lub UITableViewController.
Mikael

Jak byś to zrobił, jeśli jest to kontroler podklasy, jak stwierdzono w pytaniu?
Ethan Zhao

132

Możesz wykonać następujące czynności:

UITableView *myTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

Swift 3:

let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)

12
TO JEST PRAWDZIWE ROZWIĄZANIE! DZIĘKI. Przyjęta odpowiedź jest błędna, przynajmniej dla systemu operacyjnego 3.0+
Duck

4
Zwróć uwagę, że w przyjętym rozwiązaniu była literówka. Naprawiłem to teraz. Obie odpowiedzi działają dla mnie, ale powodują różne rzeczy. Ta odpowiedź to a UITableView, akceptowana odpowiedź to a UITableViewController.
nevan king

3
W rzeczywistości przyjęta odpowiedź jest myląca. Przeczytaj, co powiedział OP: „Mam podklasę UITableViewConotroller”. Zaakceptowana odpowiedź TYLKO daje zwykły jane UITableViewController; bez znajomości szczegółów niemożliwe jest rozwiązanie problemu użytkowników dotyczącego podklasy. Ta odpowiedź i użycie self.myTable prawdopodobnie byłoby lepsze, IMHO.
Feloneous Cat

Działa to również z ograniczeniami na iOS8 (nie wiem o iOS7) ... po prostu zainicjuj ramkę CGRectZerowraz ze stylem widoku tabeli, a następnie dodaj swoje ograniczenia, a otrzymasz odpowiedni styl wraz z ograniczeniami.
Glen Selle

20

Podaję Ci moje rozwiązanie, pracuję w "trybie XIB", tutaj kod podklasy UITableViewController:

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    return self;
}

6
Uwaga do tego rozwiązania - jeśli znajduje się ono pod kontrolerem nawigacji w NIB, utraci to odniesienie i sprawi, że będziesz naprawdę zdezorientowany.
Jesse Millikan

14

Poniższy kod zadziałał dla mnie, używam również klasy UITableview

- (id)initWithStyle:(UITableViewStyle)style
{
     self = [super initWithStyle:UITableViewStyleGrouped];

     if (self)
    {

     }
    return self;
}

1
Jest to właściwe rozwiązanie dla osób korzystających z podklasy UITableViewController. Dzięki!
Chad Pavliska

11

Jeśli dziedziczysz UITableViewController, możesz po prostu ponownie zainicjować tableView.

Cel C:

self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

Szybki:

self.tableView = UITableView(frame: CGRect.zero, style: .grouped)

6

Ustawienie, które nie jest takie trudne, jak wspomniano w pytaniu. Właściwie to całkiem proste. Spróbuj tego na scenorysie.

wprowadź opis obrazu tutaj


Jeśli masz już tableView jako część TableViewController, ustawienie go w ten sposób jest najlepsze. Inne odpowiedzi bardziej skupić się na uruchamianiu nowego tableView itd
Karthik Kannan

3

Szybki 4

Używanie Normal TableView

let tableView = TableView(frame: .zero, style: .grouped)

Korzystanie z TPKeyboardAvoidingTableView

let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

2

Aby ustawić zgrupowany styl w samym interfejsie użytkownika: -Wybierz TableView, a następnie zmień „styl” (w inspektorze atrybutów)) z prostego na zgrupowany.


2

Możesz to również zrobić, jeśli chcesz go użyć w podklasie, którą już utworzyłeś w oddzielnym pliku Swift (prawdopodobnie nie w 100% poprawne, ale działa)

override init(style: UITableViewStyle) {
    super.init(style: style)
    UITableViewStyle.Grouped
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

Teraz w swoim appdelegate.swift możesz zadzwonić:

let settingsController = SettingsViewController(style: .Grouped)

1

Możesz to zrobić również za pomocą Storyboard / XIB

  1. Przejdź do serii ujęć -> Wybierz kontroler widoku -> Wybierz swój stół
  2. Wybierz właściwość „Styl” w programie do tworzenia interfejsów
  3. Wybierz „Zgrupowane”
  4. Gotowe

0

Jeśli masz jeden TableView dla większej liczby tabel, a jedna z tych tabel jest zgrupowana, a druga zwykła, możesz zasymulować zwykły styl za pomocą funkcji z UITableViewDelegate:

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {   
    return CGFloat.min
}

0

szybki 4

jeśli nie chcesz używać scenorysu, może to być pomocne.

możesz dodać widok tabeli i ustawić właściwości w zamknięciu:

lazy var tableView: UITableView = {
        let tableView = UITableView(frame: .zero, style: .grouped)

        tableView.backgroundColor = UIColor(named: Palette.secondaryLight.rawValue)
        tableView.rowHeight = 68
        tableView.separatorStyle = .none
        tableView.translatesAutoresizingMaskIntoConstraints = false
        return tableView
    }()

następnie dodaj widok podrzędny i ustaw ograniczenia.


-5

Możesz także spróbować wyczyścić kolor linii separatora, co może dać efekt stylu zgrupowania:

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];

Sekcje nie zawalą się w ten sposób.
brduca

-11

Możesz użyć:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}

-28
self.tableView.style = UITableViewStyleGrouped

EDYTOWAĆ:

Założył, że jest to właściwość do odczytu / zapisu. W takim przypadku możesz albo postępować zgodnie z radą Dimitrisa i ustawić styl podczas tworzenia instancji kontrolera, albo (jeśli używasz XIB), możesz ustawić go przez IB.


Dziękuję za odpowiedź. Nie używam XIB, mam kontroler kart z widokiem podrzędnym, który jest moją niestandardową klasą. Nie jestem pewien, gdzie mogę umieścić wywołanie initWithStyle, nie wykonuję init TableView, jest to wykonywane przez kontroler kart. Zmiana initWithStyle w TableViewController nie wydaje się działać.
Nevan King

Jak powiedział dimitris, jeśli nie używasz XIB, musisz gdzieś initować UITableViewController . Tam chcesz użyć wywołania initWithStyle:.
drewh
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.