私のアプリはいくつかのタブ内で実行され、そのうちの 1 つはオーバーレイビューでカメラを実行します。カメラに閉じるボタンがあり、カメラを閉じた後に前のタブまたは特定のタブをすぐに読み込む方法について助けが必要です。誰かがこの問題を解決する方向に私を向けることができますか?
3 に答える
カメラ ビューに移動する前に、前のタブのインデックスを保存する必要があります。カメラ ビューがキャンセルされた場合は、それが以前に選択されたタブのインデックスであると[self.tabBarController setSelectedIndex:prevTabIndex]
仮定して、 を呼び出します。prevTabIndex
幸運を!
編集:以下のように、
あなたのAppDelegate.h
put プロパティでpreviousIndex
:
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, assign) int previousTabIndex;
@property (strong, nonatomic) UITabBarController *tabBarController;
@end
AppDelegate.m
ファイルで、次のようにします。
#import "AppDelegate.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
@implementation AppDelegate
@synthesize previousTabIndex;
- (void)dealloc
{
[_window release];
[_tabBarController release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
UIViewController *viewController1, *viewController2;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];
} else {
viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPad" bundle:nil] autorelease];
viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPad" bundle:nil] autorelease];
}
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = @[viewController1, viewController2];
[self.tabBarController setSelectedIndex:0];
self.tabBarController.delegate = self;
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
self.previousTabIndex = self.tabBarController.selectedIndex;
return YES;
}
@end
カメラ ビューには、ユーザーがキャンセル ボタンをタップしたときに、次のように呼び出されるメソッドが必要です。
- (IBAction)cancel:(id)sender {
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[self.tabBarController setSelectedIndex:appDelegate.previousTabIndex];
}
これがお役に立てば幸いです。これが役に立たない場合は、objective-c と iOS プログラミングの基本を読むことを強くお勧めします。幸運を!
編集#2
ストーリーボードの場合、Tab Bar Controller
シーン追加Object
テンプレートで、そのクラスを に設定しますAppDelegate
。UITabbarController
のdelegate
アウトレットをAppDelegate
オブジェクトに設定します。AppDelegate
で、最初の編集のようにプロパティを追加し、実装します
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
self.previousTabIndex = self.tabBarController.selectedIndex;
return YES;
}
そして、あなたのカメラビューで、ユーザーがビューをキャンセルすると
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[self.tabBarController setSelectedIndex:appDelegate.previousTabIndex];
それで全部です!幸運をあと 2 回!
特定のタブに戻るか移動するには、tabBarControllerllerのselectedIndexプロパティを使用します。特定のタブに移動するには、imagePickerController の didFinishPickingMediaWithInfo を使用します。
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
imgview.image = [info objectForKey:UIImagePickerControllerEditedImage];
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
self.tabBarController.selectedIndex = yourPreviousIndex or any index
}
EDIT次のように previousIndex を保存します。
Add int previousIndex in AppDelegate.h
(void)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
previousIndex = self.tabBarController.selectedIndex;
}
これはiOS 9.0で機能しました
UIStoryboard *myStoryBoard =[UIStoryboard storyboardWithName:[self.storyboard valueForKey:@"name"] bundle:nil];
UITabBarController *tabBarController = [myStoryBoard instantiateViewControllerWithIdentifier:@"tabStoryboardID"];
tabBarController.selectedIndex = 1;
[self presentViewController:tabBarController animated:YES completion:nil];