2012-10-22 35 views
11

Tôi là nhà phát triển Android làm việc trên phiên bản ứng dụng iOS của chúng tôi. Tôi cần biết cách đạt được hành vi tương tự như startActivityForResult trên Android. Tôi cần phải hiển thị một bộ điều khiển xem mới, sau đó có điều khiển trở về bộ điều khiển xem trước khi bộ điều khiển xem mới được đóng lại. Tôi cũng cần một phương thức gọi lại được kích hoạt tại thời điểm đó.iOS: Cách đạt được hành vi như startActivityForResult của Android

Làm thế nào tôi có thể đạt được điều này trong iOS?

Trả lời

11

Có một vài cách, do đó, chủ yếu là bạn tự làm điều này với các mẫu khác nhau. Bạn có thể thiết lập một bộ điều khiển định vị trong các đại biểu ứng dụng như sau:

self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
self.navigationController = [[ UINavigationController alloc ] initWithRootViewController:self.viewController ]; 
self.window.rootViewController = self.navigationController; 
[self.window makeKeyAndVisible]; 

Sau đó, khi bạn muốn trình bày một vc mới, bạn có thể làm điều này:

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

Để quay trở lại làm việc này:

[ self.navigationController popViewControllerAnimated:YES ]; 

theo như một callback đi một cách để làm điều này là để thực hiện một giao thức như một nơi nào đó trong dự án của bạn:

@protocol AbstractViewControllerDelegate <NSObject> 

@required 
- (void)abstractViewControllerDone; 

@end 

Sau đó làm cho mỗi bộ điều khiển xem bạn muốn có một callback được kích hoạt trong một đại biểu aka:

@interface OtherViewController : UIViewController <AbstractViewControllerDelegate> 

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

@end 

Cuối cùng khi bạn trình bày một vc mới gán nó như một đại biểu:

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

sau đó khi bạn bỏ qua ovc, thực hiện cuộc gọi này

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

Và trong rootVC, tuân theo giao thức bạn m Ngoài ra, bạn chỉ cần điền vào phương thức này:

-(void) abstractViewControllerDone { 

} 

Bạn vừa thực hiện cuộc gọi đến. Điều này đòi hỏi rất nhiều thiết lập nhưng các tùy chọn khác bao gồm xem xét NSNotifications và các khối có thể đơn giản hơn tùy thuộc vào những gì bạn đang làm.

+1

Android Rocks, iOS Sucks! (Tôi hy vọng ông chủ của tôi không nhìn thấy nhận xét này XD) Cuối cùng tôi thấy một cái gì đó dễ dàng hơn nhiều để thực hiện trong Android hơn iOS: D –

+0

Yea nhưng bây giờ bạn có thể sử dụng các khối mà làm cho nó tốt hơn –

0

Nói chung, bạn có thể sử dụng UINavigationController để kèm theo chuỗi viewControllers của mình. Sau đó, bạn có thể điều hướng qua lại giữa viewControllers. Để gọi lại, bạn có thể sử dụng phương thức ủy quyền viewWillDissapear: trên trình điều khiển chế độ xem thứ hai của mình và thực hiện một số thao tác từ đó.

1

Nếu chúng tôi cho rằng bạn muốn mở một hoạt động từ ứng dụng của riêng bạn thì thật dễ dàng. Một hoạt động Android có thể được đại diện bởi một bộ điều khiển xem (UIViewController).

Kiến trúc của iOS và Android rất khác nhau. Các hoạt động trên Android là độc lập, các bộ điều khiển trên iOS được kết nối chặt chẽ trong một ứng dụng. Bạn phải quyết định cách hiển thị bộ điều khiển trên màn hình (thường sử dụng một số UINavigationController hoặc hiển thị nó theo cách thức sử dụng presentViewController:animated:) và kết nối nó với bộ điều khiển cha bằng cách nào đó để nhận kết quả. Một mô hình đại biểu là thích hợp nhất cho việc này.

Nếu bạn muốn bắt đầu một hoạt động được xác định trong ứng dụng khác hoặc bắt đầu một hoạt động hệ thống (ví dụ: để chụp ảnh), bạn phải sử dụng một trong các bộ điều khiển được xác định trước (ví dụ: UIImagePickerController).Trên iOS, bạn không thể đơn giản sử dụng bộ điều khiển từ một ứng dụng khác giống như Android.

Và tôi có thể giới thiệu cho bạn một thứ khác - đừng viết ứng dụng iOS có mẫu thiết kế Android. Hãy nghĩ về những gì phổ biến trên iOS và thực hiện giao diện người dùng theo cách đó. Không chỉ sao chép mã Android.

Các vấn đề liên quan