UIViewController: обнаружение развертки и обобщения

Что ж, после прочтения предложений я придумал очень похожий способ, который работает с 2.7.x без создания «забавных» имен каталогов (абсолютно похожих имен) и будет создавать только указанную папку внутри zip.

Или на тот случай, если вам нужно, чтобы в вашем zip-файле находилась папка с содержимым выбранного каталога.

def zipDir( path, ziph ) :
 """
 Inserts directory (path) into zipfile instance (ziph)
 """
 for root, dirs, files in os.walk( path ) :
  for file in files :
   ziph.write( os.path.join( root, file ) , os.path.basename( os.path.normpath( path ) ) + "\\" + file )

def makeZip( pathToFolder ) :
 """
 Creates a zip file with the specified folder
 """
 zipf = zipfile.ZipFile( pathToFolder + 'file.zip', 'w', zipfile.ZIP_DEFLATED )
 zipDir( pathToFolder, zipf )
 zipf.close()
 print( "Zip file saved to: " + pathToFolder)

makeZip( "c:\\path\\to\\folder\\to\\insert\\into\\zipfile" )
7
задан Norman 2 July 2009 в 12:44
поделиться

4 ответа

Вы можете создать подкласс UINavigationController и добавить свойство didPushViewController . Затем вы можете переопределить pushViewController и popViewController , чтобы правильно установить для свойства значение true или false соответственно.

5
ответ дан 7 December 2019 в 05:27
поделиться

Вам просто нужно знать, какими будут предыдущие и следующие контроллеры представления? Или вам нужно конкретно знать, был ли контроллер представления выдвинут или вытолкнут? Вы можете реализовать следующий метод, который определяется UINavigationControllerDelegate :

- ( void )navigationController:( UINavigationController * )navigationController willShowViewController:( UIViewController * )viewController animated:( BOOL )animated
{
    UIViewController * currentController = navigationController.visibleViewController;
    UIViewController * nextController = viewController;

    // Do whatever here.
}

Если, однако, вам ДЕЙСТВИТЕЛЬНО нужно знать, был ли конкретный контроллер представления вытолкнут или выдвинут, то предложение Мэтта Бриджеса - это способ идти.

1
ответ дан 7 December 2019 в 05:27
поделиться

Не могли бы вы посмотреть на свойство viewControllers в контроллере навигации?

0
ответ дан 7 December 2019 в 05:27
поделиться

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

Не забудьте освободить и обнулить ссылки в viewWillAppear, чтобы система сбрасывается, чтобы снова правильно распознавать вещи.

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

2
ответ дан 7 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

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