如何仅通过共享扩展名启动应用程序而无需在Swift中弹出窗口?

时间:2018-08-01 06:09:29

标签: ios iphone swift ios8-share-extension

我是iOS应用开发的入门者,我想在另一个应用的复制链接上启动我的应用。单击时添加共享扩展名,它显示弹出窗口。  但是我的要求是,它不应显示弹出窗口,而应在单击共享扩展名后直接打开我的应用程序。

我做了什么:

1)在info.plist中添加了规则

#N/A

短屏:

enter image description here 请有人帮助我解决此问题。 谢谢

更新:添加以下代码后,弹出窗口不会出现,但我的应用无法打开

目标C:

<dict>
    <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
    <integer>1</integer>
</dict>

迅速:

    - (BOOL)isContentValid {
    return YES;
}
#ifdef HIDE_POST_DIALOG
- ( NSArray * ) configurationItems
{
    return @[];
}
#endif

- ( void ) didSelectPost
{
#ifdef HIDE_POST_DIALOG
    return;
#endif
}

CGFloat m_oldAlpha = 1.0;
#ifdef HIDE_POST_DIALOG
- ( void ) willMoveToParentViewController: ( UIViewController * ) parent
{
    m_oldAlpha = [ self.view alpha ];
    [ self.view setAlpha: 0.0 ];
}
#endif

#ifdef HIDE_POST_DIALOG
- ( void ) didMoveToParentViewController: ( UIViewController * ) parent
{
    // Restore the original transparency:
    [ self.view setAlpha: m_oldAlpha ];
}
#endif



#ifdef HIDE_POST_DIALOG
- ( id ) init
{
    if ( self = [ super init ] )
    {
        [ [ NSNotificationCenter defaultCenter ] addObserver: self selector: @selector( keyboardWillShow: ) name: UIKeyboardWillShowNotification    object: nil ];
    }

    return self;
}
#endif

#ifdef HIDE_POST_DIALOG
- ( void ) keyboardWillShow: ( NSNotification * ) note
{
    [ self.view endEditing: true ];
}
#endif

4 个答案:

答案 0 :(得分:0)

如果要隐藏对话框,则需要在viewDidLoad中处理数据,而不是didSelectPost,然后使用以下代码重定向应用程序:

           self.dismiss(animated: false, completion: {
               let _ = responder?.perform(selectorOpenURL, with: url)
               self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
            })

请确保您设置了所有标志和url方案。

答案 1 :(得分:0)

根据请求从viewDidLoad调用完成应该足够了

override func viewDidLoad() {

    super.viewDidLoad()
    ⋮
    // custom logic
    ⋮
    self.extensionContext?.completeRequest(returningItems: [], completionHandler: nil)
}

答案 2 :(得分:0)

从viewDidLoad中执行此操作,但是您需要设置一个小计时器,否则它将不起作用:

override func viewDidLoad() {
    super.viewDidLoad()
    Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(self.didSelectPost), userInfo: nil, repeats: false)
  }

答案 3 :(得分:-2)

将此添加到您的共享视图控制器中。不客气。

override func viewDidAppear(_ animated: Bool) {
    self.view.transform = CGAffineTransform(translationX: 0, y: self.view.frame.size.height)

    UIView.animate(withDuration: 0.25, animations: { () -> Void in
        self.view.transform = .identity
    })
}