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.