контейнер ios просмотреть в uitableviewcell

<p>я пытаюсь добавить еще один контроллер представления внутри ячейки uitableview. идея состоит в том, что вы нажимаете на ячейку, и она расширяется, чтобы показать больше контента - интерфейс обмена сообщениями. важно (я думаю), что это контролируется отдельным messaging viewcontroller.</p><p>расширение ячейки и расширение представлений внутри ячейки с надлежащими ограничениями на самом деле очень просты в раскадровках, поэтому я попытался сохранить все в раскадровках, добавив свой новый vc в tableviewcell через контейнер. таким образом, я смогу добавить ограничения к представлению контейнера и передать содержимое из моего messaging vc.</p><p>вот ошибка:</p><blockquote> <p>недопустимая конфигурация: представления контейнера нельзя помещать в элементы, которые повторяются во время выполнения.</p> </blockquote><p>любой способ обойти эту проблему, или есть ли способ, которым я могу передать представление от моего viewcontroller в эту ячейку tableview и ограничить ли это конфигурацией, которую я установил в раскадровках? спасибо!</p>

<p>у меня была та же задача, и я решил ее так:</p><p><strong>шаг 1.</strong> создать подкласс <code>mycell: uitableviewcell</code>.</p><p><strong>шаг 2.</strong> если вы используете <code>self-sizing cells</code>, в interfacebuilder добавьте uiview в mycell, затем добавьте ограничение по высоте и ограничения со всех сторон. этот вид необходим для установки высоты ячейки.<br> если нет, пропустите этот шаг и используйте <code>heightforrowatindexpath</code>.</p><p> <a href="https://i.stack.imgur.com/pqvm8.png"><img src="https://i.stack.imgur.com/pqvm8.png" alt="enter image description here"> </a> <a href="https://i.stack.imgur.com/snrpo.png"><img src="https://i.stack.imgur.com/snrpo.png" alt="enter image description here"> </a> </p><p><strong>шаг 3.</strong> в mycell.h добавьте выход из ограничения высоты вида и свойство контроллера:</p><pre><code>@interface mycell: uitableviewcell @property (weak, nonatomic) messagingvc *controller; @property (weak, nonatomic) iboutlet nslayoutconstraint *viewheight; @end </code></pre><p><strong>шаг 4.</strong> в <code>cellforrowatindexpath</code> добавьте код:</p><pre><code>- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath { mycell *cell = [tableview dequeuereusablecellwithidentifier:@"mycell" forindexpath:indexpath]; // adjust this for your structure cell.controller = [[uistoryboard storyboardwithname:@"messagingvc" bundle:nil] instantiateinitialviewcontroller]; [self addchildviewcontroller:cell.controller]; [cell.contentview addsubview:cell.controller.view]; [cell.controller didmovetoparentviewcontroller:self]; // if you use self-sizing cells cell.viewheight.constant = 200; // set your constant or calculate it return cell; } </code></pre><p><strong>шаг 5.</strong> добавить метод <code>didenddisplayingcell</code>:</p><pre><code>- (void)tableview:(uitableview *)tableview didenddisplayingcell:(uitableviewcell *)cell forrowatindexpath:(nsindexpath *)indexpath { if ([cell iskindofclass:[messagingvc class]]) [((mycell*)cell).controller removefromparentviewcontroller]; } </code></pre>

<p>вы можете просто перетащить контейнер в uitableveiw в раскадровке. например, вы можете перетащить его перед ячейкой прототипа, и вы увидите контроллер представления вашего контейнера перед ячейками прототипа. кстати, вы можете перетащить любой элемент пользовательского интерфейса в табличное представление. я не уверен, как бороться с autolayout в комбинированном представлении таблицы + контейнера, возможно, вам нужно вручную вычислить/установить ограничения во время выполнения. обновлю свой ответ, когда найду правильное решение об автопоставке. </p>

<p>сделайте ваш контент <code>uitableviewcontroller</code> как <code>static</code>.</p><p><img src="https://i.stack.imgur.com/swv1s.png" alt="enter image description here"></p>