Как я могу настроить 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];

Swift 3:

let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)
Лиор
источник
12
ЭТО НАСТОЯЩЕЕ РЕШЕНИЕ! СПАСИБО. Принятый ответ неверен, по крайней мере, для OS 3.0+
Дак
4
Обратите внимание, что в принятом решении есть опечатка. Я исправил это сейчас. Оба ответа работают для меня, но они создают разные вещи. Этот ответ - UITableView, принятый ответ - UITableViewController.
Неванский король
3
На самом деле принятый ответ вводит в заблуждение. Пожалуйста, прочтите, что OP сказал: «У меня есть подкласс UITableViewConotroller». Принятый ответ дает ТОЛЬКО простой jane UITableViewController; без знания деталей невозможно решить проблему пользователей относительно подкласса. Этот ответ и использование self.myTable, вероятно, было бы лучше, ИМХО.
Feloneous Cat 01
Это также работает с ограничениями в iOS8 (не знаю о iOS7) ... просто инициализируйте фрейм CGRectZeroвместе со своим стилем tableview, а затем добавьте свои ограничения, и вы получите правильный стиль вместе с вашими ограничениями.
Глен Селле
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];

Swift:

self.tableView = UITableView(frame: CGRect.zero, style: .grouped)
DZoki019
источник
6

Это не так сложно, как упоминалось в вопросе. На самом деле это довольно просто. Попробуйте это на раскадровке.

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

Fangming
источник
Если у вас уже есть tableView как часть TableViewController, это лучший вариант. Другие ответы больше сосредоточены на создании экземпляра нового tableView и т. Д.
Картик Каннан
3

Swift 4

Использование обычного TableView

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

Использование TPKeyboardAvoidingTableView

let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)
Md. Ибрагим Хасан
источник
3

Swift 4+:

let myTableViewController = UITableViewController(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
    }()

затем добавьте subview и установите ограничения.

Moraei
источник
-5

Вы также можете попытаться сделать цвет разделительной линии четким, что может дать эффект группированного стиля:

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];
MyCSharpCorner
источник
Так разделы не рухнут.
brduca
-11

Ты можешь использовать:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}
Джиоти Кумари
источник
-28
self.tableView.style = UITableViewStyleGrouped

РЕДАКТИРОВАТЬ:

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

рисовал
источник
Спасибо за ответ. Я не использую XIB, у меня есть контроллер вкладок с подпредставлением, которое является моим настраиваемым классом. Не уверен, где я могу разместить вызов initWithStyle, я не выполняю инициализацию TableView, это выполняется контроллером вкладок. Изменение initWithStyle в TableViewController, похоже, не работает.
Nevan King
Как сказал димитрис, если вы не используете XIB, вы должны где-то инициализировать UITableViewController . Вот где вы хотите использовать вызов initWithStyle :.
ничья