Bir UITableView'ı gruplanmış stile nasıl ayarlayabilirim


91

UITableViewControllerBölümleri olan bir alt sınıfım var. Bölümler varsayılan stille gösteriliyor (yuvarlak köşeler yok). TableView stilini kodda gruplandırılacak şekilde nasıl ayarlayabilirim? Bunun için Arayüz Oluşturucu kullanmıyorum, bu nedenle

[self.tableView setGroupedStyle]

Stack Overflow'da arama yaptım, ancak bir cevap bulamadım.


Hızlı versiyon: Bağlantı
Juan Boero

Yanıtlar:


108

Ne demek istediğinizi anlıyorsam, denetleyicinizi bu tarzda başlatmalısınız. Gibi bir şey:

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

3
Belirtildiği gibi değiştirilebilecek bir özellik değildir. Her zaman gruplanmış bir grup.
Corey Floyd

Bu doğru bir cevap değil, UITableViewController alt sınıfına sahip olma sorununu çözmüyor. UITableViewController'ı devralırsanız, başka bir UITableView veya UITableViewController oluşturmamak için yapıcıyı geçersiz kılmanız gerekir.
Mikael

Soruda belirtildiği gibi, alt sınıflı bir denetleyiciyse, bunu nasıl yaparsınız?
Ethan Zhao

132

Aşağıdakileri yapabilirsiniz:

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

Swift 3:

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

12
GERÇEK ÇÖZÜM BU! TEŞEKKÜRLER. Kabul edilen cevap yanlış, en azından OS 3.0+ için
Duck

4
Kabul edilen çözümde bir yazım hatası olduğunu lütfen unutmayın. Şimdi düzelttim. Her iki cevap da benim için işe yarıyor, ancak farklı şeyleri somutlaştırıyorlar. Bu cevap a UITableView, kabul edilen cevap a UITableViewController.
nevan king

3
Aslında kabul edilen cevap yanıltıcıdır. Lütfen OP'nin "UITableViewConotroller alt sınıfım var" dediğini okuyun. Kabul edilen yanıt YALNIZCA size basit bir UITableViewController verir; Detayları bilmeden kullanıcının alt sınıfa ilişkin problemini çözmek imkansızdır. Bu cevap ve self.myTable'ı kullanmak muhtemelen daha iyi olurdu, IMHO.
Feloneous kedi

Bu aynı zamanda iOS8'deki kısıtlamalarla da çalışır (iOS7 hakkında bilmiyorum) ... sadece tablo görünüm stilinizle birlikte bir çerçeve CGRectZeroile başlatın ve ardından kısıtlamalarınızı ekleyin ve kısıtlamalarınızla birlikte doğru stili elde edin.
Glen Selle

20

Size çözümümü veriyorum, "XIB modunda" çalışıyorum, burada bir UITableViewController alt sınıfının kodu:

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

6
Bu çözüme uyarı - eğer bu NIB'de bir navigasyonController altındaysa, bu referansı kaybedecek ve kafanızı gerçekten karıştıracaktır.
Jesse Millikan

14

Aşağıdaki kod benim için çalıştı, ayrıca UITableview sınıfını kullanıyorum

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

     if (self)
    {

     }
    return self;
}

1
Bu, UITableViewController alt sınıfını kullanan kişiler için doğru çözümdür. Teşekkürler!
Çad Pavliska

11

UITableViewController'ı miras alıyorsanız, tableView'i yeniden başlatabilirsiniz.

Hedef C:

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

Swift:

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

6

Soruda belirtildiği gibi ayarlamak o kadar da zor değil. Aslında oldukça basit. Bunu film şeridinde deneyin.

görüntü açıklamasını buraya girin


Zaten bir TableViewController ayarının parçası olarak bir tableView kullanıyorsanız, bunu bu şekilde ayarlamak en iyisidir. Diğer cevaplar vs yeni tableView, başlatmasını daha fazla odaklanmak
Karthik Kannan

3

Swift 4

Normal TableView Kullanımı

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

TPKeyboardAvoidingTableView Kullanımı

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

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

2

Kullanıcı arabiriminin kendisinde gruplanmış stili ayarlamak için: -TableView öğesini seçin ve ardından "stili" (öznitelik denetçisinde) düzden Gruplanmış olarak değiştirin.


2

Bunu, zaten ayrı bir hızlı dosyada oluşturduğunuz bir alt sınıfta kullanmak istiyorsanız da yapabilirsiniz (muhtemelen% 100 doğru değil ama işe yarıyor)

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

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

Artık appdelegate.swift'inizde şunları arayabilirsiniz:

let settingsController = SettingsViewController(style: .Grouped)

1

Bunu storyboard / XIB kullanarak da yapabilirsiniz

  1. Film şeridine gidin -> ViewController'ınızı seçin -> Tablonuzu seçin
  2. Arayüz oluşturucuda "Stil" özelliğini seçin
  3. "Gruplanmış" ı seçin
  4. Bitti

0

Daha fazla tablo için bir TableView'unuz varsa ve bu tablolardan biri gruplanmış ve diğeri düz ise, UITableViewDelegate işleviyle düz stili simüle edebilirsiniz:

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

0

hızlı 4

film şeridi kullanmak istemiyorsanız, bu yardımcı olabilir.

bir kapanışta tablo görünümü ekleyebilir ve özellikleri ayarlayabilirsiniz:

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

daha sonra alt görünümü ekleyin ve kısıtlamaları ayarlayın.


-5

Ayrıca, gruplanmış stil efekti verebilecek ayırıcı çizgi rengini netleştirmeyi deneyebilirsiniz:

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

Bölümler bu şekilde çökmeyecek.
brduca

-11

Kullanabilirsiniz:

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

-28
self.tableView.style = UITableViewStyleGrouped

DÜZENLE:

Bunun bir okuma / yazma özelliği olduğunu varsaymıştı. Bu durumda, Dimitris tavsiyesini takip edebilir ve denetleyiciyi başlatırken stili ayarlayabilirsiniz veya (bir XIB kullanıyorsanız), IB aracılığıyla ayarlayabilirsiniz.


Yanıt için teşekkürler. XIB kullanmıyorum, özel sınıfım olan bir alt görünüme sahip bir sekme denetleyicim var. İnitWithStyle çağrısını nereye koyabileceğimden emin değilim, TableView initini yapmıyorum, sekme denetleyicisi tarafından yapılıyor. TableViewController'daki initWithStyle'ın değiştirilmesi işe yaramıyor gibi görünüyor.
nevan king

Dimitris'in dediği gibi, bir XIB kullanmıyorsanız, bir yerde UITableViewController'ı başlatıyor olmalısınız . İnitWithStyle'ı kullanmak istediğiniz yer: çağrı.
Drewh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.