web-dev-qa-db-ja.com

iOS 5.1で設定/設定を開く方法は?

IOS 5.1は、ユーザーを設定にナビゲートするための標準のURLエンコーディングを壊したようです。

例えば:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Twitter"]];

IOS 5.0では機能しますが、iOS 5.1では機能しません(デバイスとシミュレーターの両方)。

IOS 5.1でこの機能を再現する方法を見つけた人はいますか?

35
James Jones

いいえ、この機能を再現する方法がわかりません。

しかし、あなたができることは、復元を要求するレーダーを提出することです。 これはレーダーです スキームを最初に文書化することを要求します。

David Barnard は、iOS 5.1が設定アプリのURLスキームに違反していることを確認しました。


UpdateiOS 8にも同様の機能があります アプリの設定を開くため。 Mike および Soto_iGhost に感謝します。

定数 UIApplicationOpenSettingsURLString(UIApplication Documentation) はアプリの設定を開き、Twitterの設定は開きません。完全に同じ機能ではありませんが、以前よりもはるかにクリーンで、公式に認識されています。

これで、各アプリの[設定]にプライバシー、モバイルデータ、アプリのバックグラウンド更新と通知を使用できるようになったので、これはさらに便利です。

11
JoePasq

それは少しトリッキーです。*TWTWeetComposeViewController*のサブビューを削除することで取得できます。そのため、ユーザーがログインしていない場合にのみアラートが表示され、設定ボタンをクリックすると、アプリで設定ページを開くことができます。

     + (void)setAlertForSettingPage :(id)delegate 
    {
     // Set up the built-in Twitter composition view controller.
        TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init];


        // Create the completion handler block.
        [tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
            [delegate dismissModalViewControllerAnimated:YES];
        }];

        // Present the Tweet composition view controller modally.
        [delegate presentModalViewController:tweetViewController animated:YES];
        //tweetViewController.view.hidden = YES;
        for (UIView *view in tweetViewController.view.subviews){
            [view removeFromSuperview];
        }

     } 

ここで、デリゲートはビューコントローラです。ビューコントローラ内でこのメソッドを使用している場合は、selfの代わりにdelegateを使用してください。

編集:非推奨のエラーが発生した場合は、代わりに次のiOS6互換コードを使用してください。

- (void)setAlertForSettingPage
{
    // Set up the built-in Twitter composition view controller.
    SLComposeViewController *tweetViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

    // Present the Tweet composition view controller modally.
    [self presentViewController:tweetViewController animated:YES completion:nil];
    for (UIView *view in tweetViewController.view.subviews){
        [view removeFromSuperview];
    }
}
13
PJR

あなたはこれを行うことができます。

TWTweetComposeViewController *ctrl = [[TWTweetComposeViewController alloc] init];
                    if ([ctrl respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) {
                        // Manually invoke the alert view button handler
                        [(id <UIAlertViewDelegate>)ctrl alertView:nil
                                             clickedButtonAtIndex:0];
                    }
3
Saad

Twitterのフレームワーク(そのTwitterビューコントローラ)を見ると、「prefs:root = Twitter」が内部にあり、5.1にもこの行があります。したがって、おそらくAppleは、plist内の特別なキーやメソッド「openURL」など、システムアプリでないかどうかを何らかの方法でチェックするなど、他のアプリに対してそれを無効にする何かを作成しました。

1
artysx