Добавить представление контейнера в контроллер навигации

Я хочу создать представление контейнера, в котором есть несколько представлений. Мне удалось заставить это работать с Auto Layout. Теперь я хочу поместить этот контейнер в UINavigationController. Я сделал это в iOS Designer, но следующий код больше не работает (он работает без навигационного контроллера):

HalfTableViewController testController1 = new HalfTableViewController ();
this.AddChildViewController (testController1);
testController1.View.Frame = View.Bounds;
this.View.AddSubview (testController1.View);

Это на C#, но это не имеет значения, если вы не знакомы с ним. Я хочу знать, как я могу использовать представление контроллера навигации в качестве представления контейнера, в котором я могу добавлять свои представления. В настоящее время я вижу панель навигации, но это черный экран. Я пробовал несколько вещей, но я не знаю, как я могу заставить это работать. Ваше решение может быть, конечно, в Objective-C.

Изменить:

Я попробовал это без AutoLayout, и отображаются табличные представления. Теперь я хочу знать, что я делаю неправильно. Вот мой код автоматического макета:

View.TranslatesAutoresizingMaskIntoConstraints = false;
tv1.View.TranslatesAutoresizingMaskIntoConstraints = false;
tv2.View.TranslatesAutoresizingMaskIntoConstraints = false;
tv3.View.TranslatesAutoresizingMaskIntoConstraints = false;

var constraints = new List<NSLayoutConstraint> ();
constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Top, NSLayoutRelation.Equal, TopLayoutGuide, NSLayoutAttribute.Bottom, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Left, NSLayoutRelation.Equal, View, NSLayoutAttribute.Left, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Right, NSLayoutRelation.Equal, tv2.View, NSLayoutAttribute.Left, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Width, NSLayoutRelation.Equal, tv2.View, NSLayoutAttribute.Width, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, View, NSLayoutAttribute.Bottom, 1, 0));

constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Top, NSLayoutRelation.Equal, TopLayoutGuide, NSLayoutAttribute.Bottom, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Left, NSLayoutRelation.Equal, tv1.View, NSLayoutAttribute.Right, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Right, NSLayoutRelation.Equal, tv3.View, NSLayoutAttribute.Left, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Width, NSLayoutRelation.Equal, tv3.View, NSLayoutAttribute.Width, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, View, NSLayoutAttribute.Bottom, 1, 0));

constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Top, NSLayoutRelation.Equal, TopLayoutGuide, NSLayoutAttribute.Bottom, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Left, NSLayoutRelation.Equal, tv2.View, NSLayoutAttribute.Right, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Right, NSLayoutRelation.Equal, View, NSLayoutAttribute.Right, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, View, NSLayoutAttribute.Bottom, 1, 0));

View.AddConstraints (constraints.ToArray ());

Что мне не хватает?


person testing    schedule 14.10.2014    source источник


Ответы (2)


В основном вы должны знать концепцию контроллера представления модели.

  1. Здесь контроллер — это контроллер навигации, который содержит представления, которые мы будем перемещать туда и обратно.
  2. модель это данные
  3. Контроллер представления содержит представление.

Код:

//Create a container view.
From above concept the below is view
TestViewController *testview = [[TestviewCopntroller alloc]init];
//set some properties

//the below is data
testview.somearray = array;
testview.somedictionary = dictionary;

//and this is navigation controller
UINavigationController *nav = [[UInavigationController alloc]initwithrootviewcontroller:testview];

//if you want this as root view then
appdelegate.window.rootviewcontroller = nav;

//if you want to present this view
[self presentviewcontroller:nav animated:YES];

//if you want to push
[self.navigationcontroller pushviewcontroller:testview animated:YES];
person iOSdev    schedule 14.10.2014
comment
Я знаю концепцию MVC, но это не моя проблема. Я не хочу навязывать мнение здесь. Я хочу добавить дочернее представление к моему навигационному контроллеру (так как это должно быть UIContainerView). Но у меня всегда черный экран. - person testing; 14.10.2014
comment
видите, вы не можете добавить подвид в навигационный контроллер. у вас есть контроллер представления, который является дочерним элементом навигационного контроллера, и вы можете добавить представление контейнера в дочерний контроллер представления. Представление навигационного контроллера - это то, что мы видим, высота которого составляет 45 или 60. почему вы хотите чтобы добавить uicontainerview в навигационный контроллер. Четко скажите. - person iOSdev; 14.10.2014
comment
Я хочу иметь продвинутый UISplitViewController. Я хочу разместить три представления таблицы рядом. Контроллер разделенного представления может быть только корневым представлением все время. Контейнер может быть решением моей проблемы (с разными взглядами на него). UINavigationController следует использовать для навигации. Или у вас есть другая идея? - person testing; 14.10.2014
comment
проверьте google для контроллера slideview. Он будет иметь разделенное представление, и первая часть будет исправлена, и в зависимости от первого выбора разделения у вас будет вторая и вторая ячейки таблицы, выбор которых дает третью таблицу. лучше искать некоторые проекты контроллера слайдинга на github - person iOSdev; 14.10.2014
comment
Вы имеете в виду что-то вроде SWRevealController? Или на каком примере вы думали? Мне нужно одновременно отображать три представления таблицы (для iPad). Не знаю, поможет ли здесь контроллер скользящего представления. - person testing; 14.10.2014
comment
use может использовать некоторые контроллеры представления стека. - person iOSdev; 14.10.2014

Кажется, это делает этот трюк:

//View.TranslatesAutoresizingMaskIntoConstraints = false;
tv1.View.TranslatesAutoresizingMaskIntoConstraints = false;
tv2.View.TranslatesAutoresizingMaskIntoConstraints = false;
tv3.View.TranslatesAutoresizingMaskIntoConstraints = false;

var constraints = new List<NSLayoutConstraint> ();

constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Top, NSLayoutRelation.Equal, TopLayoutGuide, NSLayoutAttribute.Bottom, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, BottomLayoutGuide, NSLayoutAttribute.Top, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Left, NSLayoutRelation.Equal, View, NSLayoutAttribute.Left, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv1.View, NSLayoutAttribute.Right, NSLayoutRelation.Equal, tv2.View, NSLayoutAttribute.Left, 1, 0));

constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Top, NSLayoutRelation.Equal, TopLayoutGuide, NSLayoutAttribute.Bottom, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, BottomLayoutGuide, NSLayoutAttribute.Top, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Left, NSLayoutRelation.Equal, tv1.View, NSLayoutAttribute.Right, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Right, NSLayoutRelation.Equal, tv3.View, NSLayoutAttribute.Left, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv2.View, NSLayoutAttribute.Width, NSLayoutRelation.Equal, tv1.View, NSLayoutAttribute.Width, 1, 0));

constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Top, NSLayoutRelation.Equal, TopLayoutGuide, NSLayoutAttribute.Bottom, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, BottomLayoutGuide, NSLayoutAttribute.Top, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Left, NSLayoutRelation.Equal, tv2.View, NSLayoutAttribute.Right, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Right, NSLayoutRelation.Equal, View, NSLayoutAttribute.Right, 1, 0));
constraints.Add (NSLayoutConstraint.Create (tv3.View, NSLayoutAttribute.Width, NSLayoutRelation.Equal, tv1.View, NSLayoutAttribute.Width, 1, 0));
person testing    schedule 14.10.2014