Як я можу встановити UITableView до згрупованого стилю


91

У мене є UITableViewControllerпідклас із розділами. Розділи відображаються зі стилем за замовчуванням (без закруглених кутів). Як я можу встановити стиль TableView згрупованим у коді? Я не використовую Interface Builder для цього, тому мені потрібно щось на зразок

[self.tableView setGroupedStyle]

Я шукав у Stack Overflow, але не зміг знайти відповідь.


Свіфт версія: Посилання
Хуан Боеро

Відповіді:


108

Якщо я розумію, що ви маєте на увазі, вам доведеться ініціалізувати свій контролер таким стилем. Щось на зразок:

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

3
Як зазначено, це не властивість, яку можна змінити. Один згрупований завжди згрупований.
Кори Флойд,

Це не правильна відповідь, вона не вирішує проблему наявності підкласу UITableViewController. Якщо ви успадковуєте UITableViewController, вам доведеться перевизначити конструктор, не створюючи іншого UITableView або UITableViewController.
Мікаель

Як би ви це зробили, якщо це субкласифікований контролер, як зазначено у питанні?
Ітан Чжао,

132

Ви можете зробити наступне:

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

Свіфт 3:

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

12
ЦЕ РЕАЛЬНЕ РІШЕННЯ! ДЯКУЮ. Прийнята відповідь неправильна, принаймні для ОС 3.0+
Качка

4
Зверніть увагу, що у прийнятому рішенні була помилка. Зараз я це виправив. Обидві відповіді працюють для мене, але вони вказують різні речі. Ця відповідь a UITableView, прийнята відповідь a UITableViewController.
неван-король

3
Насправді прийнята відповідь вводить в оману. Будь ласка, прочитайте, що було сказано в ОП "У мене є підклас UITableViewConotroller". Прийнята відповідь ТІЛЬКИ дає вам простий Джейн UITableViewController; не знаючи деталей, неможливо вирішити проблему користувачів щодо підкласу. Ця відповідь та використання self.myTable, мабуть, були б кращими, IMHO.
Feloneous Cat

Це також працює з обмеженнями на iOS8 (не знаю про iOS7) ... просто ініціалізуйте рамкою CGRectZeroразом зі стилем табличного подання, а потім додайте свої обмеження, і ви отримаєте правильний стиль разом із своїми обмеженнями.
Глен Селле

20

Я даю вам своє рішення, я працюю в "режимі XIB", тут код підкласу UITableViewController:

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

6
Будьте готові до цього рішення - якщо воно знаходиться під навігаційним контролером у NIB, воно втратить це посилання та змусить вас по-справжньому заплутатися.
Джессі Міллікан,

14

Нижче коду, який працює для мене, я також використовую клас UITableview

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

     if (self)
    {

     }
    return self;
}

1
Це правильне рішення для людей, які використовують підклас UITableViewController. Дякую!
Чад Павліска,

11

Якщо ви успадковуєте UITableViewController, ви можете просто знову ініціювати tableView.

Завдання C:

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

Стрімкий:

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

6

Це не так складно, як згадувалось у питанні. Насправді це досить просто. Спробуйте це на раскадровці.

введіть тут опис зображення


Якщо у вас вже є tableView як частина TableViewController, налаштування його найкраще. Інші відповіді більше зосереджуються на створенні нового табличного перегляду тощо
Картік Каннан

3

Стрімкий 4

Використання звичайного TableView

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

Використання TPKeyboardAvoidingTableView

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


2

Для встановлення згрупованого стилю в самому інтерфейсі користувача: -Виберіть TableView, а потім змініть "стиль" (в інспекторі атрибутів) з простого на Згрупований.


2

Ви також можете зробити це, якщо хочете використовувати його в підкласі, який ви вже створили в окремому швидкому файлі (можливо, не на 100% правильний, але працює)

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

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

Тепер у вашому appdelegate.swift ви можете зателефонувати:

let settingsController = SettingsViewController(style: .Grouped)

1

Ви можете зробити це, використовуючи також розкадрування / XIB

  1. Перейдіть до розкадровки -> Виберіть свій ViewController -> Виберіть свою таблицю
  2. Виберіть властивість "Стиль" у конструкторі інтерфейсів
  3. Виберіть "Згруповано"
  4. Готово

0

Якщо у вас є один TableView для більшої кількості таблиць, і одна з цих таблиць згрупована, а інша - звичайна, ніж ви можете імітувати звичайний стиль за допомогою функції з UITableViewDelegate:

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

0

стрімкий 4

якщо ви не хочете використовувати раскадровку, це може допомогти.

Ви можете додати подання таблиці та встановити властивості в закритті:

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

потім додайте у підпрогляд і встановіть обмеження.


-5

Ви також можете спробувати зробити колір лінії роздільника чітким, що може дати ефект згрупованого стилю:

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

Розділи не згорнуться таким чином.
brduca

-11

Ви можете використовувати:

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

-27
self.tableView.style = UITableViewStyleGrouped

РЕДАГУВАТИ:

Припустив, що це властивість читати / писати. У цьому випадку ви можете або слідувати порадам Димитріса, і встановити стиль під час створення екземпляра контролера, або (якщо ви використовуєте XIB), ви можете встановити його через IB.


Дякую за відповідь. Я не використовую XIB, у мене є контролер вкладок із підзаглядом, який є моїм спеціальним класом. Не впевнений, куди можна поставити виклик initWithStyle, я не виконую init TableView, це робиться контролером вкладок. Зміна initWithStyle в TableViewController, здається, не працює.
Неван Кінг

Як сказав dimitris, якщо ви не використовуєте XIB, ви повинні десь ініціювати UITableViewController . Тут ви хочете використовувати initWithStyle: call.
розіграш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.