Шаг 1. Добавьте новый UIViewController
с именем MainPageViewController
.
Шаг 2. Добавьте новый контроллер представления в MainInterface
Storyboard, измените его класс на MainPageViewController
в разделе Custom Class раскадровки, установите Storyboard ID
на MainPageViewController
в разделе Identity.
Шаг 3. Откройте файл info.plist расширения Share.
По умолчанию это выглядит примерно так-
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<string>TRUEPREDICATE</string>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
Теперь вместо клавиши NSExtensionMainStoryboard
по умолчанию используйте клавишу NSExtensionPrincipalClass
, поэтому окончательный результат будет
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<string>TRUEPREDICATE</string>
</dict>
<key>NSExtensionPrincipalClass</key>
<string>HomeViewController</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
Где HomeViewController
— наш новый контроллер точки входа.
Шаг 4. Теперь самое важное нужно исправить странную проблему, связанную с именованием модулей.
Чтобы исправить это, нам нужно добавить @objc(HomeViewController)
вверху вашего файла HomeViewController
.
Шаг 5. Также для анимации презентации нам нужно добавить код анимации в viewWillAppear
См. ниже ссылочный код:
import UIKit
@objc(HomeViewController)
class HomeViewController : UINavigationController {
init() {
let viewController:UIViewController = UIStoryboard(name: "MainInterface", bundle: nil).instantiateViewController(withIdentifier: "MainPageViewController") as UIViewController
super.init(rootViewController: viewController)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.view.transform = CGAffineTransform(translationX: 0, y: self.view.frame.size.height)
UIView.animate(withDuration: 0.25, animations: { () -> Void in
self.view.transform = CGAffineTransform.identity
})
}
}
Где MainPageViewController
это идентификатор вашего MainViewController
, который мы хотим предъявить.
Шаг 6. Чтобы отключить анимацию, мы можем создать новую функцию в классе MainPageViewController
:
func hideExtensionWithCompletionHandler(completion:@escaping (Bool) -> Void) {
UIView.animate(withDuration: 0.20, animations: {
self.navigationController!.view.transform = CGAffineTransform(translationX: 0, y: self.navigationController!.view.frame.size.height)
}, completion: completion)
}
вызовите выше функцию на кнопке «Сохранить» или «Отмена» и внутри блока, мы можем вызвать completeRequest
или cancelRequest(withError:)
func saveButtonTapped(sender: UIBarButtonItem) {
self.hideExtensionWithCompletionHandler(completion: { (Bool) -> Void in
self.extensionContext!.completeRequest(returningItems: nil, completionHandler: nil)
})
}
Теперь делай что хочешь, чувак, делай двойное чувак ;-)
person
Zoeb S
schedule
02.11.2017