Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:如何实现类似Android的行为';s startActivityForResult_Android_Iphone_Ios - Fatal编程技术网

iOS:如何实现类似Android的行为';s startActivityForResult

iOS:如何实现类似Android的行为';s startActivityForResult,android,iphone,ios,Android,Iphone,Ios,我是一名Android开发者,正在开发我们应用程序的iOS版本。我需要知道如何在Android上实现类似startActivityForResult的行为。我需要显示一个新的视图控制器,然后在新视图控制器关闭时将控制权返回到上一个视图控制器。我还需要一个回调方法在那个时候被触发 在iOS中如何实现这一点?通常,您可以使用UINavigationController来封闭视图控制器链。然后,您可以在视图控制器之间来回导航。对于回调,您可以在第二个视图控制器上使用viewWillDissapear:

我是一名Android开发者,正在开发我们应用程序的iOS版本。我需要知道如何在Android上实现类似startActivityForResult的行为。我需要显示一个新的视图控制器,然后在新视图控制器关闭时将控制权返回到上一个视图控制器。我还需要一个回调方法在那个时候被触发


在iOS中如何实现这一点?

通常,您可以使用
UINavigationController
来封闭
视图控制器链。然后,您可以在
视图控制器
之间来回导航。对于回调,您可以在第二个视图控制器上使用
viewWillDissapear:
delegate方法,并从那里执行一些操作。

有几种方法,因此大多数情况下您可以使用各种模式自己执行。您可以在app delegate中设置导航控制器,如下所示:

self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
self.navigationController = [[ UINavigationController alloc ] initWithRootViewController:self.viewController ];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
然后,当你想展示一个新的vc时,你可以这样做:

OtherViewController *ovc = [[ OtherViewController alloc ] initWithNibName:@"OtherViewController" bundle:nil ];
[ self.navigationController pushViewController:ovc animated:YES ];
要返回,请执行以下操作:

[ self.navigationController popViewControllerAnimated:YES ];
就回调而言,实现这一点的一种方法是在项目中的某个地方创建这样的协议:

@protocol AbstractViewControllerDelegate <NSObject>

@required
- (void)abstractViewControllerDone;

@end
然后,当您解除ovc时,打这个电话

 [self.delegate abstractViewControllerDone];
 [ self.navigationController popViewControllerAnimated:YES ];
在符合您制定的协议的rootVC中,您只需填写以下方法:

 -(void) abstractViewControllerDone {

 }

你刚刚打电话给我。这需要大量的设置,但其他选项包括查看NSNotifications和Block,根据您的操作,这些选项可能更简单。

如果我们假设您想从自己的应用程序打开活动,那么就很容易了。android活动可以由视图控制器(
UIViewController
)表示

iOS和Android的体系结构非常不同。Android上的活动是独立的,iOS上的控制器在应用程序中紧密连接。您必须决定如何在屏幕上显示控制器(通常使用
UINavigationController
,或使用
presentViewController:animated:
)将其以某种方式连接到父控制器以接收结果。委托模式最适合于此

如果要启动在另一个应用程序中定义的活动或启动系统活动(例如拍摄相机照片),则必须使用其中一个预定义的控制器(例如UIImagePickerController)。在iOS上,你不能像Android那样简单地使用来自不同应用程序的控制器

我可以向你推荐另一件事——不要用Android设计模式编写iOS应用程序。考虑一下iOS上的常见功能,并以这种方式实现UI。不要只是复制Android代码。

Android太棒了,iOS太差劲了!(我希望我的老板没有看到这个评论XD)最后,我看到了一些比iOS更容易在Android上实现的东西:D
 [self.delegate abstractViewControllerDone];
 [ self.navigationController popViewControllerAnimated:YES ];
 -(void) abstractViewControllerDone {

 }