ShareKit 模态视图控制器不会消失

Posted

技术标签:

【中文标题】ShareKit 模态视图控制器不会消失【英文标题】:ShareKit modal view controller won't go away 【发布时间】:2011-10-30 02:42:44 【问题描述】:

我在 Xcode 4.2 (ios SDK 5) 上使用 ShareKit 0.2.1 在 Twitter 上共享文本。它共享良好,但模式视图控制器在单击取消按钮后成功共享后不会消失(见下文):

这是我的代码:

-(IBAction)shareOnTwitter:(id)sender


    // Item to share
    NSString *text = @"Go away, modal view controller!";

    [SHKTwitter shareText:text];


我做错了什么?

【问题讨论】:

【参考方案1】:

我和你有同样的问题。这是 iOS 5 的问题。这是因为 ShareKit 在 UIViewController 上使用了一个名为 parentViewController 的方法,根据 Apple 文档,您不能再在 iOS 5 中使用它。相反,您必须使用 presentingViewController

所以要在ShareKit代码中修复它,进入SHK.m,找到带有签名(void)hideCurrentViewControllerAnimated:(BOOL)animated的方法,并将其替换为:

- (void)hideCurrentViewControllerAnimated:(BOOL)animated

    if (isDismissingView)
        return;

    if (currentView != nil)
    
        // Dismiss the modal view
        if ([currentView parentViewController] != nil)
        
            self.isDismissingView = YES;
            [[currentView parentViewController] dismissModalViewControllerAnimated:animated];
         else if ([currentView presentingViewController] != nil) 
            self.isDismissingView = YES;
            [[currentView presentingViewController] dismissModalViewControllerAnimated:animated];
     else
        self.currentView = nil;
    

这适用于我在 iOS 5 上。

【讨论】:

这也是我实现的解决方案 y 它正在改变设备的方向【参考方案2】:
if (isDismissingView)
    return;

if (currentView != nil)

    // Dismiss the modal view
    if ([currentView parentViewController] != nil)
    
        self.isDismissingView = YES;
        [[currentView parentViewController] dismissModalViewControllerAnimated:animated];
    

    else 
        //## ADD BELOW ##
        self.isDismissingView = YES;
        [currentView dismissModalViewControllerAnimated:animated];
        self.currentView = nil;

    

else 
    [[self getTopViewController].navigationController popViewControllerAnimated:YES];

【讨论】:

【参考方案3】:

这是我在我的一个应用程序中使用的代码。 它可以很好地解雇。

NSURL *url = [NSURL URLWithString:@"http://itunes.apple.com/us/app/packager/id459511278?l=nl&ls=1&mt=8"];
NSString *twittertext = [[NSString alloc] initWithFormat: @"Tweet Text"];
SHKItem *item = [SHKItem URL:url twittertext];

// Share the item
[SHKTwitter shareItem:item];
[twittertext release]; 

【讨论】:

如果你这样做 [NSString stringWithFormat:@"Tweet Text"];并删除 [twittertext release];线,它仍然被解雇吗?显然,唯一的区别是我使用的是 ARC...【参考方案4】:

我在我的应用中使用了以下代码(禁用了 ARC)

NSString *text = @"Go away, modal view controller!";

[SHKTwitter shareText:text];

我可以确认它可以很好地解雇。 在尝试使 Sharekit ARC 兼容时,您可能更改了 SHKTwitterForm.m 中的一些代码。这导致了你的错误

【讨论】:

不,我刚刚编译了所有没有 ARC 的 ShareKit 文件:-fno-objc-arc 我刚刚重读了你原来的问题,发现有些困惑,你是如何使用 Xcode 4.3 的?另外,您遇到的错误是什么模拟器版本?你也在真机上测试过吗?

以上是关于ShareKit 模态视图控制器不会消失的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 平滑显示 2 个连续的模态视图控制器

标签栏控制器在模态转场后消失

显示模态视图时使 iPhone 状态栏消失?

UISplitViewController 不会显示模态视图控制器

当被模态视图控制器覆盖时,iOS 6 视图控制器布局在方向更改后不会更新

从模态视图切换到标签栏视图控制器并且不会丢失标签栏