Пользовательский UISplitViewController?

#objective-c #ipad #uiviewcontroller #uitableview #uisplitviewcontroller

#objective-c #iPad #uiviewcontroller #uitableview #uisplitviewcontroller

Вопрос:

Я хочу эффект UISplitViewController, однако я не использую шаблон split view.

Это относительно легко достичь без шаблона? И с использованием обычного UIViewController?

Что я хочу, чтобы это был UITableView обычного размера и расположения, который затем имеет детальный вид обычного размера, который затем, конечно, переходит во всплывающее окно и детальный вид при портретном изображении.

Ответ №1:

Делая это без Interface Builder, вы бы создали класс UIViewController. В методе viewDidLoad этого класса создайте UIView или UITableView с исходным кодом кадра, где вы хотите, и желаемым размером. (Освободите его в методе viewDidUnload.) Затем установите self.view UIViewController в UIViewController, чтобы указать на это новое представление.

 self.view = [[UIView alloc] initWithFrame:...];    // edit - added in response to your question
  

Если вы создали UIView, то вы захотите поместить свой UITableView в это новое представление. (Этот подход позволяет добавлять дополнительные элементы в пользовательский интерфейс контейнера, если вам нужно.)

Убедитесь, что ваш UIViewController поддерживает протоколы UITableViewDelegate и UITableViewDataSource. Добавьте методы делегата и источника данных, и все должно быть готово.

Это новое представление может охватывать другие представления, или вы можете настроить другие представления так, чтобы они помещались рядом с ним. Вам нужно только установить там фреймы в соответствии с тем, что вы хотите с ними делать.

При использовании UITableViewController существуют некоторые ограничения, поэтому многие люди рекомендуют вместо этого использовать UIViewController. как я описал выше. Вы можете найти в Google дополнительную информацию по этой теме.

Комментарии:

1. «Затем установите self.view UIViewController в UIViewController, чтобы указать на это новое представление». Каким образом указать на новое представление? Я уверен, что понимаю, что вы сказали иначе, поэтому я просто следую коду, указанному в шаблоне, с дополнительной настройкой, о которой вы упомянули, и я там, верно?

2. Смотрите Мое редактирование в моем первоначальном ответе. Это должно помочь. Если вы используете IB, я полагаю, это автоматически делается для вас, если вы все правильно подключаете. Я предпочитаю сам исправлять код, чтобы я мог видеть все хуки в своем коде.

Ответ №2:

Просто создайте новый временный Xcode-проект из этого шаблона и судите сами, если это сложно для вас, чтобы адаптировать ваш (реальный) код.

Ответ №3:

ДА. Вы можете сделать это довольно легко. Просто используйте делегаты для передачи сообщений между левым и правым боковыми представлениями (root и detail). Например, метод didSelectRowAtIndexPath TableView может использоваться вместе с делегированием для передачи сообщения в правостороннее подробное представление. Коснитесь ячейки в левой таблице, отобразите ее текст в виде метки с правой стороны. Это всего лишь простой пример. И да, вы также можете обрабатывать повороты и отправлять вид слева в UIPopoverController, тем самым предоставляя полноэкранный режим просмотра деталей в портретной ориентации.

Также попробуйте MGSplitViewController. Это дает вам множество других вариантов настройки контроллера с разделенным представлением.