6

Tôi đang làm việc trên một ứng dụng trình bày một số dữ liệu trong một detailViewController. Tôi có một rightBarButton trong thanh điều hướng trình bày một UIActivityViewController được lấp đầy với các mục con UIActivity sublclassed của tôi. Hầu hết chúng hoạt động tốt vì chúng chỉ thay đổi một khía cạnh nhỏ cho dữ liệu từ khung nhìn chi tiết, nhưng tôi cần một trong số chúng để mở một modalViewController khi được chọn. Tôi tiếp tục nhận được cảnh báo sau từ bảng điều khiển .....Làm thế nào tôi có thể trình bày một ModalViewController từ một mục UIActivity được chọn từ UIActivity View Controller?

Warning: Attempt to present <UINavigationController: 0x1fd00590> 
on <UITabBarController: 0x1fde1070> which is already presenting <MPActivityViewController: 0x1fd2f970> 

Tôi cho rằng đáng lưu ý là ứng dụng không bị lỗi nhưng chế độ xem phương thức cũng không xuất hiện. Tôi giả sử rằng UIActivityViewController là một chế độ xem chính thức và bạn chỉ có thể hiển thị một trong số đó tại một thời điểm, do đó nhiệm vụ là tìm ra cách thực hiện segue của tôi sau khi ActivityView biến mất, nhưng đó là nơi tôi bị stumped. Tôi hoan nghênh mọi sự giúp đỡ, suy nghĩ hoặc phản hồi. Tôi đã thử google nhưng đã không có nhiều may mắn, tôi giả sử vì UIActivityViewController là rất mới. Đây là thiết lập của tôi cho đến nay, đối tượng UIActivity của tôi có một đại biểu được đặt thành detailViewController cho một giao thức tùy chỉnh cho phép detailViewController thực hiện các thay đổi dữ liệu và sau đó cập nhật dạng xem của nó.

cho các hoạt động được đề cập sẽ trình bày bộ điều khiển ModalView Tôi đã thử một vài cách tiếp cận mà tất cả đều nhận được cảnh báo tương tự.


Không có tác phẩm nào trong số này hoạt động !!!


1) chỉ đơn giản là cố gắng thực hiện segue từ phương pháp đại biểu của tôi

- (void) activityDidRequestTransactionEdit 
{ 
    NSLog(@"activityDidRequestTransactionEdit"); 
    [self performSegueWithIdentifier:@"editTransaction" sender:self]; 
} 

2) cố gắng thiết lập một khối hoàn trên UIActivityViewController và có phương pháp đại biểu của tôi thiết lập một lá cờ bool rằng quan điểm phương thức nên được hiển thị (self.editor)

[activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) { 
    NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed); 
    if (completed && self.editor) { 
     [self performSegueWithIdentifier:@"editTransaction" sender:self]; 
    } 
}]; 

3) phân lớp chính UIActivityViewController, cho nó chi tiếtXem làm đại biểu và ghi đè nó 'S dismissViewControllerAnimated: phương pháp với khối hoàn thành của riêng tôi

- (void) dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion 
{ 
    [super dismissViewControllerAnimated:flag completion:^{ 
     [self.MPActivityDelegate activityDidRequestTransactionEdit]; 

    }]; 
} 

Giải pháp làm việc


Trong lớp con UIActivity bạn cần phải ghi đè phương pháp này như vậy

- (UIViewController *) activityViewController { 
    MPEditMyDataViewController *controller = [[MPEditMyDataViewController alloc] init]; 
    controller.activity = self; // more on this property below 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; 
    return navController; 
} 

trong MPEditMyDataViewController.h của bạn (t ông xem điều khiển hành động được lựa chọn nên sản xuất) Bạn cần một tài sản trở lại lớp con hoạt động như vậy

@property (strong, nonatomic) MPEditMyDataActivity *activity; 

trong MPEditMyDataViewController của bạn.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] 
            initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
            target:self 
            action:@selector(cancel)]; 

    self.navigationItem.leftBarButtonItem = cancelButton; 
} 
// here's how you dismiss the view controller when you are done with it 
// after saving the changes to your data or whatever the view controller is supposed to do. 
-(void) cancel 
{ 
    NSLog(@"Cancel Button Pushed"); 
    [self.activity activityDidFinish:YES]; 
} 
@end 

Trả lời

3

Đã làm một số giấy tờ cần tìm tòi thêm và thấy phương pháp này cho UIActivity subclassing

- (UIViewController *) activityViewController 

nó được điều khiển quan điểm của tôi bật lên như tôi muốn bằng cách trả lại nó từ đây thay vì cố gắng Segue nó từ my detailViewController. Bây giờ để tìm ra cách loại bỏ nó khi tôi hoàn thành nó !!!!

+0

Chỉ để theo dõi trong trường hợp bất kỳ ai khác gặp sự cố khi xem ví dụ về giải pháp trong chỉnh sửa ở trên. – vichudson1

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