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.

Nevan King
źródło
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];
Dimitris
źródło
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)
Lior
źródło
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;
}
Thomas Decaux
źródło
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;
}
Gagan Joshi
źródło
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)
DZoki019
źródło
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

Fangming
źródło
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)
Md. Ibrahim Hassan
źródło
3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)
Juan Boero
źródło
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.

Zeesha
źródło
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)
Jordi Bruin
źródło
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
Anny
źródło
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
}
Illya Krit
źródło
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.

moraei
źródło
-5

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

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];
MyCSharpCorner
źródło
Sekcje nie zawalą się w ten sposób.
brduca
-11

Możesz użyć:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}
Jyoti Kumari
źródło
-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.

drewh
źródło
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