Что ж, после прочтения предложений я придумал очень похожий способ, который работает с 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" )
Вы можете создать подкласс UINavigationController и добавить свойство didPushViewController
. Затем вы можете переопределить pushViewController
и popViewController
, чтобы правильно установить для свойства значение true или false соответственно.
Вам просто нужно знать, какими будут предыдущие и следующие контроллеры представления? Или вам нужно конкретно знать, был ли контроллер представления выдвинут или вытолкнут? Вы можете реализовать следующий метод, который определяется UINavigationControllerDelegate
:
- ( void )navigationController:( UINavigationController * )navigationController willShowViewController:( UIViewController * )viewController animated:( BOOL )animated
{
UIViewController * currentController = navigationController.visibleViewController;
UIViewController * nextController = viewController;
// Do whatever here.
}
Если, однако, вам ДЕЙСТВИТЕЛЬНО нужно знать, был ли конкретный контроллер представления вытолкнут или выдвинут, то предложение Мэтта Бриджеса - это способ идти.
Не могли бы вы посмотреть на свойство viewControllers в контроллере навигации?
Другой способ - спрятать любые контроллеры представления, которые вы просматриваете, в качестве локальных переменных класса - тогда в viewWillAppear вы знаете, что попали в разряд из-за развертки, если любые локальные переменные класса по-прежнему установлены. Вы даже знаете, из какого контроллера вернулся пользователь, поэтому вы можете выполнять другую логику (например, извлекать измененные значения из контроллеров представления, до которых вы перешли).
Не забудьте освободить и обнулить ссылки в viewWillAppear, чтобы система сбрасывается, чтобы снова правильно распознавать вещи.
Мне этот механизм нравится больше, чем то, что контроллеры детализации знают о главном представлении в качестве делегата для отправки изменений, так как часто они работают с отдельными небольшими фрагментами данных и им не нужно знать о целом главном контроллере представления. Это также упрощает их повторное использование, поскольку они могут быть вызваны множеством разных классов.