Як я можу встановити 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.