parentViewController всегда является контроллером Навигации?

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

Я предполагаю, что items - это массив элементов jQuery (поэтому я звоню .height()) ...

РЕДАКТИРОВАТЬ: ваше редактирование показывает массив элементов HTML, вы можете преобразовать его в элементы jQuery, например, items = items.map(item => $(item))

let pageInd = 1

// loop over each page
while (items.length) {

  let // stores the items of the current page
      curPageItems = []
  ,   // current page height
      height = 0

  // loop over each elements of the current page
  curPageElmts: while (items.length) {

    // get the next element
    const nextElmt = items.shift()

    // update height
    height += nextElmt.height()

    // break loop if the height goes over 1000px
    if (height > 1000) break curPageElmts

    // otherwise add it to the current page
    curPageItems.push(nextElmt)

  }

  // append those items in the corresponding page
  // (jQuery accepts appending arrays of elements)
  $(`.page-${pageInd++}`).append(curPageItems)

}

Вы также можете избежать последней строки и сохранить результат в новом массиве. .

7
задан Chris Hanson 28 October 2008 в 23:29
поделиться

2 ответа

Я рекомендовал бы использовать шаблон делегации для решения проблемы. Создайте свойство

@property (nonatomic, assign) id <MyModalViewDelegate> delegate;

И соответствующий протокол

@protocol MyModalViewDelegate
@optional
    - (void)myModalViewControllerDidFinish:(MyModalViewController *)aModalViewController;
@end

Когда пользователь закончит с Вашим представлением (например, коснется кнопки сохранения), отправьте это сообщение:

if ([self.delegate respondsToSelector:@selector(myModalViewControllerDidFinish:)])
    [self.delegate myModalViewControllerDidFinish:self];

Теперь, установите делегата в контроллере представления, который должен управлять всем этим, и он будет уведомлен, когда контроллер представления будет закончен. Обратите внимание необходимость в контроллере представления для отклонения модального контроллера представления. Но, логически, это имеет смысл, так как это был объект, который представил модальный контроллер представления во-первых.

Это - то, как Apple решает эту проблему в, например, UIImagePickerController и UIPersonPickerController.

14
ответ дан 6 December 2019 в 09:23
поделиться

Существует несколько способов, которыми можно обработать это. Самое простое должно, вероятно, только добавить свойство UIViewController в myModalViewController и установить его на page1Controller перед представлением его:

myModalViewController.logicalParent = self; //page1Controller
[self presentModalViewController:myModalViewController animated:YES];

Просто удостоверьтесь, что Вы добавляете соответствующую переменную экземпляра @property, и @synthesize для logicalParent к myModalViewController, затем у Вас будет способ передать данные назад в ViewController, который инициировал модальное диалоговое окно. Это также для передающих данных назад и вперед между разными уровнями навигации, прежде чем Вы продвинете и вытолкаете их на стеке.

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

4
ответ дан 6 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: