Bagaimana cara mengatur UITableView ke gaya yang dikelompokkan


91

Saya memiliki UITableViewControllersubclass dengan bagian. Bagian ditampilkan dengan gaya default (tidak ada sudut membulat). Bagaimana cara mengatur gaya TableView untuk dikelompokkan dalam kode? Saya tidak menggunakan Interface Builder untuk ini, jadi saya membutuhkan sesuatu seperti

[self.tableView setGroupedStyle]

Saya mencari di Stack Overflow, tetapi tidak dapat menemukan jawaban.


Versi Swift: Tautan
Juan Boero

Jawaban:


108

Jika saya mengerti apa yang Anda maksud, Anda harus menginisialisasi pengontrol Anda dengan gaya itu. Sesuatu seperti:

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

3
Seperti yang dinyatakan, ini bukan properti yang bisa diubah. Satu kelompok selalu dikelompokkan.
Corey Floyd

Ini bukan jawaban yang benar, ini tidak menyelesaikan masalah memiliki subkelas UITableViewController. Jika Anda mewarisi UITableViewController, Anda harus mengganti konstruktor agar tidak membuat UITableView atau UITableViewController lain.
Mikael

Bagaimana Anda melakukan ini jika itu adalah pengontrol subclass, seperti yang dinyatakan dalam pertanyaan?
Ethan Zhao

132

Anda dapat melakukan hal berikut:

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

Cepat 3:

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

12
INI ADALAH SOLUSI NYATA! TERIMA KASIH. Jawaban yang diterima salah, setidaknya untuk OS 3.0+
Duck

4
Harap perhatikan bahwa ada kesalahan ketik dalam solusi yang diterima. Saya sudah memperbaikinya sekarang. Kedua jawaban itu cocok untuk saya, tetapi keduanya memberi contoh yang berbeda. Jawabannya adalah a UITableView, jawaban yang diterima adalah a UITableViewController.
raja nevan

3
Sebenarnya, jawaban yang diterima menyesatkan. Silakan baca apa yang dikatakan OP "Saya memiliki subclass UITableViewConotroller". Jawaban yang diterima HANYA memberi Anda UITableViewController polos; tanpa mengetahui detailnya, tidak mungkin untuk menyelesaikan masalah pengguna terkait subclass. Jawaban ini dan menggunakan self.myTable mungkin akan lebih baik, IMHO.
Kucing Feloneous

Ini juga berfungsi dengan batasan di iOS8 (tidak tahu tentang iOS7) ... cukup inisialisasi dengan bingkai CGRectZerobersama dengan gaya tampilan tabel Anda dan kemudian tambahkan batasan Anda dan Anda mendapatkan gaya yang tepat bersama dengan batasan Anda.
Glen Selle

20

Saya memberikan solusi saya, saya bekerja dalam "mode XIB", berikut kode subclass dari UITableViewController:

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

6
Peringatan untuk solusi ini - jika ini berada di bawah navigationController di NIB, itu akan kehilangan referensi itu dan membuat Anda benar-benar bingung.
Jesse Millikan

14

Kode di bawah ini Bekerja untuk saya, saya juga menggunakan kelas UITableview

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

     if (self)
    {

     }
    return self;
}

1
Ini adalah solusi yang tepat untuk orang yang menggunakan subclass UITableViewController. Terima kasih!
Chad Pavliska

11

Jika Anda mewarisi UITableViewController, Anda bisa menginisialisasi tableView lagi.

Tujuan C:

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

Cepat:

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

6

Pengaturan yang tidak sesulit yang disebutkan dalam pertanyaan. Sebenarnya ini sangat sederhana. Coba ini di papan cerita.

masukkan deskripsi gambar di sini


Jika Anda sudah memiliki tableView sebagai bagian dari TableViewController yang menyetelnya dengan cara ini adalah yang terbaik. Jawaban lain lebih fokus pada contoh tableView baru, dll.
Karthik Kannan

3

Cepat 4

Menggunakan TableView Normal

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

Menggunakan TPKeyboardAvoidingTableView

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

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

2

Untuk menyetel gaya yang dikelompokkan di ui itu sendiri: -Pilih TableView lalu ubah "gaya" (di inspektur atribut)) dari biasa menjadi Dikelompokkan.


2

Anda juga dapat melakukan ini jika Anda ingin menggunakannya pada subkelas yang telah Anda buat dalam file swift terpisah (mungkin tidak 100% benar tetapi berfungsi)

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

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

Sekarang di appdelegate.swift Anda dapat memanggil:

let settingsController = SettingsViewController(style: .Grouped)

1

Anda dapat melakukannya dengan menggunakan storyboard / XIB juga

  1. Buka storyboard -> Pilih viewController Anda -> Pilih tabel Anda
  2. Pilih properti "Style" di pembuat antarmuka
  3. Pilih "Dikelompokkan"
  4. Selesai

0

Jika Anda memiliki satu TableView untuk lebih banyak tabel, dan salah satu tabel ini dikelompokkan dan yang lainnya polos, Anda dapat mensimulasikan gaya polos dengan fungsi dari UITableViewDelegate:

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

0

cepat 4

jika Anda tidak ingin menggunakan storyboard, ini mungkin bisa membantu.

Anda dapat menambahkan tampilan tabel dan mengatur properti dalam penutupan:

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
    }()

lalu tambahkan subview dan setel batasan.


-5

Anda juga dapat mencoba memperjelas warna garis pemisah yang dapat memberikan efek gaya yang dikelompokkan:

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

Bagian tidak akan diciutkan dengan cara ini.
brduca

-11

Kamu bisa memakai:

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

-28
self.tableView.style = UITableViewStyleGrouped

EDIT:

Menganggap ini adalah properti baca / tulis. Dalam hal ini, Anda dapat mengikuti saran Dimitris dan mengatur gaya saat Anda membuat instantiate controller, atau (jika Anda menggunakan XIB), Anda dapat mengaturnya melalui IB.


Terima kasih balasannya. Saya tidak menggunakan XIB, saya memiliki pengontrol tab dengan subview yang merupakan kelas khusus saya. Tidak yakin di mana saya dapat meletakkan panggilan initWithStyle, saya tidak melakukan TableView init, ini dilakukan oleh pengontrol tab. Mengubah initWithStyle di TableViewController sepertinya tidak berhasil.
raja nevan

Seperti yang dikatakan dimitris, jika Anda tidak menggunakan XIB, Anda harus menginisiasi UITableViewController di suatu tempat . Di situlah Anda ingin menggunakan initWithStyle: panggilan.
seri
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.