[iOS] JavaScript やaタグから簡単にスキームでiOSアプリのViewを呼び出せるライブラリを公開しました。
URL
環境
- iOS8.0以上
想定している使用者さん
- WebViewを使っている・使おうとしている方でカスタムスキームを使ってJavaScriptなどからiOSアプリのView遷移やアクション呼び出しをしたい
- StoryBoardの管理やインスタンスの作成が面倒くさい
- iOSアプリの初期開発をするが、Viewの遷移処理をまとめたい
経緯
まず、iOS開発をしていると、どうしてもViewの遷移処理やその書き方がバラバラになってしまうことが多いと感じていました。
具体的には
HogeViewController *hogeVC = [[HogeViewController alloc] init];
[self.navigationController pushViewController:hogeVC animated:YES];
とやっているところがあったり、
dispatch_async(dispatch_get_main_queue(), ^{
HogeViewController *hogeVC = [[HogeViewController alloc] init];
[self.navigationController pushViewController:hogeVC animated:YES];
});
とやっているところがあったりなどです。
他にもモーダルを呼び出すときには
HogeViewController *hogeVC = [[HogeViewController alloc] init];
[self presentViewController:hogeVC animated:YES completion:^{
hogehoge..
}];
のようにしなければならず、そもそもView遷移をまとめたい!
さらには、StoryBoardを呼び出す際にいちいち、
NSString *stbName = @"HogeViewController";
UIStoryboard *stb = [UIStoryboard storyboardWithName:stbName bundle:nil];
UIViewController *vc = [stb instantiateViewControllerWithIdentifier:stbName];
[self.navigationController pushViewController:vc animated:YES];
などとやるのは面倒くさい!
と考えていました。
そんな中様々なコードからインスパイアを受け、ちょうど手元でiOSの初期開発をしていたので汎用的に作りライブラリ化したという経緯です。
使い方
少し長くなってしまいましたが使い方に入ります。
インストール
pod 'AFSheme'
インポートは
#import AFSheme.h
で、使用できるメソッドは現在三通りです。
+(void)openShemeWithString:(NSString *)name
parameters:(NSDictionary *)parameters
createViewType:(CreateViewType)createViewType
useStoryBoard:(BOOL)useStoryBoard;
+(void)openSheme:(NSString *)className
parameters:(NSDictionary *)parameters
createViewType:(CreateViewType)createViewType
useStoryBoard:(BOOL)useStoryBoard;
+(void)openSheme:(UIViewController *)vc
parameters:(NSDictionary *)parameters
createViewType:(CreateViewType)createViewType;
一番上の+(void)openShemeWithString:(NSString *)name
はnameで指定したViewControllerへ遷移させるものです。
これは後述するDelegate methodでnameと実際のViewControllerを対応付けることにより実現されます。
このメソッドを使えば簡単にJavaScriptから任意のViewControllerを呼び出すことができます。
例えばアプリ側で
customsheme://?view=HogeViewController&hoge=fuga
へのアクセスを受け取り、HogeViewcontrollerをNSStringとして受け取れば
[AFSheme openSheme:@"CustomViewController",
parameters:@{}
createViewType:CreateViewTypePush
useStoryBoard:YES];
のようにしてHogeViewControllerへ遷移させることができます。
その際、NSStringの@"HogeViewController"
と遷移させたい実際のHogeViewController
のクラス名を対応させるためにDelegate methodを実装する必要があります。
やり方は簡単でAppDelegate.mにこれだけです。
#import AFSheme.h
#import HogeViewController.h
@interface AppDelegate () <AFShemeConverterDelegate>
@end
- (NSDictionary *)afShemeMappingDictionary {
return @{@"HogeViewController":HogeViewController.className};
}
UIViewControllerにカテゴリでクラスメソッド className
を実装しています。
他のメソッドも
#import CustomViewController.h
[AFSheme openSheme:CustomViewController.className
parameters:@{}
createViewType:CreateViewTypePush
useStoryBoard:YES];
や
#import CustomViewController.h
CustomViewController *customViewController = [[CustomViewController alloc] init];
[AFSheme openSheme:customViewController
parameters:@{}
createViewType:CreateViewTypePush];
のようにして使えます。
パラメータ
1.NSDictionary *parameters
遷移先のViewControllerに渡したいパラメーター。
遷移先のViewControllerにて
self.parameters
のようにアクセスできます。
2.CreateViewType createViewType
EnumでViewの遷移タイプを選択できます。
-
CreateViewTypePush
- UINavigationControllerのpushViewControllerの遷移を行います。
今表示されているViewControllerがnavigationControllerを親に持つ必要があります。
- UINavigationControllerのpushViewControllerの遷移を行います。
-
CreateViewTypeModal
- UIViewControllerのpresentViewControllerの遷移を行います。
-
CreateViewTypeAlert
- UIAlertControllerを表示したいときに使います。
3.BOOL useStoryBoard
遷移先のViewControllerにStoryBoardのスタイルを使うかどうかを選択します。
注意
このライブラリではStoryBoardの名前とidentifierをViewcontrollerのクラス名と同じだと想定して自動的にStoryBoardのインスタンスを生成しています。
なので例えば上述の三つのメソッドで
@interface FugaViewController ()
@end
のように実装されたFugaViewControllerを使う場合はそのStoryBoard名、identifierをFugaViewController
にする必要があります。
ここには十分注意してください。
これもいちいちStoryBoardのインスタンスを作る手間を減らすためです。
今後
このライブラリを使えば、簡単にウェブとの連携ができたり、View遷移の手間が省けると思います。
まだまだ粗いところもありますが、是非お使いください!
今後CreateViewTypeなどの種類も増やすなどもっと便利にしたいと考えています。
ぜひPRなどお待ちしております!
Author And Source
この問題について([iOS] JavaScript やaタグから簡単にスキームでiOSアプリのViewを呼び出せるライブラリを公開しました。), 我々は、より多くの情報をここで見つけました https://qiita.com/aoifukuoka/items/4bced4a0a317d8a96d44著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .