2017-10-31 11 views
0

私はShare extension &に取り組んでいます。これに関する質問が1件あります。ポップアップ(デフォルト)の代わりに、共有拡張のフルビューコントローラを開くことはできますか

共有拡張でフルビューコントローラーを開くことは可能ですか、またStoryboardShare extensionに使用してUITableViewまたは他のIBoutletを追加することはできますか?事前に

おかげ

+1

はい、whatsappはそれを行います。 –

+0

これをチェックしてください、これは速いの古いバージョンですが、あなたはそれを助けることができます。 https://github.com/martinnormark/ShareByMail –

答えて

1

ステップ1:MainPageViewControllerという名前の新しいUIViewControllerを追加します。

ステップ2:は、MainInterfaceストーリーボードで新しいビューコントローラを追加ストーリーボードのカスタムクラスのセクションでMainPageViewControllerへのクラスを変更、アイデンティティセクションでMainPageViewControllerStoryboard IDを設定します。

ステップ3:デフォルトではオープンシェア拡張子のInfo.plist

ではなく、デフォルトNSExtensionMainStoryboardキー使用NSExtensionPrincipalClassキーなので、最終的な結果を今すぐthis-

<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> 

ようになります

<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:今、我々はfix weird issue related with module namingに必要最も重要

これを修正するには、HomeViewControllerファイルの先頭に@objc(HomeViewController)を追加する必要があります。

ステップ5:

MainPageViewControllerはの識別子である
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 
     }) 
    } 
} 

はまた、プレゼンテーションをアニメーション化するために、我々はviewWillAppear

参照コードの下を参照してくださいにアニメーションのコードを追加する必要がありますあなたのMainViewController、我々が提示したい。

ステップ6:たちはMainPageViewControllerクラスに新しい関数を作成することができますアニメーションで却下する:保存上のFUNC上記

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) 
} 

コールまたは[キャンセル]ボタンをし、ブロック内で、我々は呼び出すことができcompleteRequestcancelRequest(withError:)

func saveButtonTapped(sender: UIBarButtonItem) { 
     self.hideExtensionWithCompletionHandler(completion: { (Bool) -> Void in 
      self.extensionContext!.completeRequest(returningItems: nil, completionHandler: nil) 
     }) 
    } 

今、あなたがしたいことは何でもやってください。ダブルマン:-)

関連する問題