繁体   English   中英

iOS:如何实现Android的startActivityForResult等行为

[英]iOS: How to achieve behavior like Android's startActivityForResult

我是Android应用程序的iOS版本开发人员。 我需要知道如何在Android上实现类似于startActivityForResult的行为。 我需要显示一个新的视图控制器,然后在新视图控制器关闭时控制返回到前一个视图控制器。 我还需要一个当时触发的回调方法。

我怎样才能在iOS中实现这一目标?

有几种方法,所以大多数情况下你自己用各种模式做到这一点。 您可以在应用程序委托中设置导航控制器,如下所示:

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

然后让每个视图控制器都想要在委托中触发回调:

 @interface OtherViewController : UIViewController <AbstractViewControllerDelegate>

 @property (nonatomic, assign) id<AbstractViewControllerDelegate> delegate;

 @end

最后,当您呈现新的vc时,将其指定为委托:

  OtherViewController *ovc = [[ OtherViewController alloc ] initWithNibName:@"OtherViewController" bundle:nil ];
  ovc.delegate = self;
  [ self.navigationController pushViewController:ovc animated:YES ];

然后当你解雇ovc时,拨打这个电话

 [self.delegate abstractViewControllerDone];
 [ self.navigationController popViewControllerAnimated:YES ];

在rootVC中,它符合您所制定的协议,您只需填写此方法:

 -(void) abstractViewControllerDone {

 }

你刚刚打过电话。 这需要大量的设置,但其他选项包括查看NSNotifications和块,这可以更简单,具体取决于你做什么。

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

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

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

我可以推荐你另一件事 - 不要用Android设计模式编写iOS应用程序。 想想iOS上的常见内容并以这种方式实现UI。 不要只复制Android代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM