2009-06-17 5 views
68

У меня есть подкласс UITableViewController с разделами. Разделы отображаются с использованием стиля по умолчанию (без закругленных углов). Как настроить стиль TableView для группировки в коде? Я не использую Interface Builder для этого, так что мне нужно что-то вродеКак настроить UITableView на сгруппированный стиль

[self.tableView setGroupedStyle] 

Я искал на переполнение стека, но не мог придумать ответ.

+0

Swift версии: [Link] (http://stackoverflow.com/a/35662019/1634890) –

ответ

87

Если я понимаю, что вы имеете в виду, вы должны инициализировать свой контроллер этим стилем. Что-то вроде:

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

Как указано, это не свойство, которое можно изменить. Один сгруппированный всегда сгруппирован. –

+0

Это неправильный ответ, он не решает проблему наличия подкласса UITableViewController. Если вы наследуете UITableViewController, вы должны переопределить конструктор, чтобы не создавать другой UITableView или UITableViewController. – Mikael

-23
self.tableView.style = UITableViewStyleGrouped 

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

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

+0

Компилятор жалуется, что это свойство только для чтения. –

+0

Спасибо за ответ. Я не использую XIB, у меня есть контроллер табуляции с subview, который является моим обычным классом. Не знаю, где я могу поместить вызов initWithStyle, я не занимаюсь init TableView, это делается с помощью контроллера табуляции. Изменение initWithStyle в TableViewController не работает. –

+0

Как сказал dimitris, если вы не используете XIB, вы должны инициализировать UITableViewController * где-то *. Здесь вы хотите использовать вызов initWithStyle:. – drewh

112

Вы можете сделать следующее:

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

Swift 3:

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

ЭТО РЕАЛЬНОЕ РЕШЕНИЕ! БЛАГОДАРЮ. Принятый ответ неверен, по крайней мере для OS 3.0+ – SpaceDog

+3

Обратите внимание, что в принятом решении была опечатка. Я исправил это сейчас. Оба ответа работают для меня, но они создают разные вещи. Этот ответ является «UITableView», принятый ответ - «UITableViewController». –

+0

@ Цифровой робот: принятый ответ не является неправильным. – ColdLogic

-3

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

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

Разделы не будут разрушаться таким образом. – Brduca

19

Я даю вам мое решение, я работаю в «режиме XIB», вот код подкласса в UITableViewController:

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

Предостережение к этому решению - если это находится под навигационным контроллером в NIB, он потеряет эту ссылку и сделает вас действительно запутанным. –

+0

блестящий ответ. – Fattie

-11

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

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

Ошибка «Назначение на свойство readonly» –

10

Ниже код работал для меня, Я также использую UITableView класс

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

    if (self) 
    { 

    } 
    return self; 
} 
+1

Это * правильное решение для людей, использующих подкласс UITableViewController. Благодаря! –

2

для множества сгруппированных стиля в самом УИ: -Выберите TableView затем изменить «стиль» (в атрибуте инспектора)) от простых групповым.

0

Swift 2,1:

let myTableViewController = UITableViewController(style: UITableViewStyle.Grouped) 
1

Вы также можете сделать это, если вы хотите использовать его на подклассе вы уже создали в отдельном файле быстрой (возможно, не 100% правильно, но работает)

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

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

Теперь у вас appdelegate.скоры вы можете позвонить:

let settingsController = SettingsViewController(style: .Grouped) 
0

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

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

Вы можете сделать это с помощью раскадровки/XIB также

  1. Перейти к раскадровке -> Выберите ViewController -> Выберите ваш стол
  2. Выберите свойство «Стиль» в интерфейсе строитель
  3. Выберите «Группировать»
  4. Done
3

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

enter image description here

2

Если вы наследуя UITableViewController, вы можете просто инициализировать Tableview снова.

цель C:

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

Свифта 4:

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

Свифта 4

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

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

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

let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped) 
Смежные вопросы