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.

raja nevan
sumber
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];
Dimitris
sumber
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)
Lior
sumber
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;
}
Thomas Decaux
sumber
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;
}
Gagan Joshi
sumber
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)
DZoki019
sumber
6

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

masukkan deskripsi gambar di sini

Fangming
sumber
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)
Md. Ibrahim Hassan
sumber
3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)
Juan Boero
sumber
2

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

Zeesha
sumber
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)
Jordi Bruin
sumber
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
Anny
sumber
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
}
Illya Krit
sumber
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.

moraei
sumber
-5

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

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];
MyCSharpCorner
sumber
Bagian tidak akan diciutkan dengan cara ini.
brduca
-11

Kamu bisa memakai:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}
Jyoti Kumari
sumber
-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.

drewh
sumber
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