24

tôi là tạo ra một ứng dụng người là dòng kịch bản như hình dưới đây:việc khai trương một viewController cụ thể để đáp ứng với một push thông báo từ xa

storyboard

Khi người dùng đăng nhập từ "Sysalert View Controller" họ đưa vào "Danh sách điều khiển xem danh sách" nơi tôi làm một NSURLConnection để tải một số JSON vào bảng. Khi người dùng chạm vào một hàng trong bảng, họ sẽ được đưa vào "Chi tiết tin nhắn" hiển thị thông tin chi tiết hơn cho thông báo đó.

Khi người dùng khởi chạy ứng dụng từ thông báo đẩy, bất kể trạng thái của ứng dụng trước khi ra mắt, tôi muốn ứng dụng tải dữ liệu "Danh sách thư" từ máy chủ của tôi và sau đó hiển thị cho họ thông báo được đẩy vào thiết bị.

Tôi biết mình cần sử dụng didFinishLaunchingWithOptions để yêu cầu ứng dụng phản ứng với thông báo đẩy nhưng làm cách nào để thiết lập cấu trúc phân cấp để trình điều khiển chế độ xem "Danh sách thư" tải dữ liệu của nó và sau đó đẩy chế độ xem "Chi tiết thư" điều khiển lên ngăn xếp cho thông báo thích hợp?

Về cơ bản, kiểu bắt chước hành vi này của ứng dụng Thư hoặc ứng dụng Thư. Khi mở bằng thông báo sẽ đưa bạn đến trình điều khiển chế độ xem cho thông báo đó nhưng bạn vẫn có thể di chuyển lại trong cấu trúc phân cấp như thể bạn đã khởi chạy ứng dụng từ viewController ban đầu và đi ngang qua viewControllers lần lượt.

+0

@conorgrifinhave bạn có câu trả lời? Tôi có cùng một vấn đề..thanks –

+0

Có thể trùng lặp của [iOS Swift Điều hướng đến một số ViewController lập trình từ thông báo đẩy] (https://stackoverflow.com/questions/43058261/ios-swift-navigate-to-certain-viewcontroller-programmatically -from-push-notifica) –

Trả lời

8

Có thể thực hiện những gì bạn mô tả, nhưng tôi không khuyến khích bạn làm như vậy.

Frist, đặt một bộ điều khiển xem ngắt kết nối với quan điểm mà bạn muốn trong kịch bản, cung cấp cho các bộ điều khiển xem một định danh, một cái gì đó giống như "My Push Notification View"

Trong didFinishLaunchingWithOptions:, Bạn có thể tới các rootViewController từ ứng dụng đại biểu. Bộ điều khiển này sẽ là bộ điều khiển điều hướng. Sử dụng bộ điều khiển điều hướng, bạn có thể đẩy một bộ điều khiển chế độ xem mới lên trên ngăn xếp. Để tạo bộ điều khiển chế độ xem mới, bạn khởi tạo trình điều khiển chế độ xem với định danh "Chế độ xem thông báo đẩy của tôi".

UINavigationController *navController = (UINavigationController *)self.window.rootViewController; 
UIViewController *notificationController = [navController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"]; 

[navController pushViewController:notificationController animated:YES]; 

Tôi nghĩ bạn sẽ muốn sử dụng một cái gì đó như -presentViewController:animated:completion: để hiển thị chế độ xem thay vì gián đoạn ngăn xếp điều hướng.

UIViewController *rootController = (UIViewController *)self.window.rootViewController; 
UIViewController *notificationController = [rootController.storyboard instantiateViewControllerWithIdentifier:@"My Push Notification View"]; 

[rootController presentViewController:notificationController animated:YES completion:NULL]; 
+0

Tôi đã thực hiện điều này trong ios 7 trong didFinishLauncingWithOption nó được kích hoạt và mở mỗi khi ứng dụng được mở. Tôi sẽ thay đổi gì để chỉ kích hoạt nếu thông báo đẩy đến và/hoặc nếu ứng dụng bị đóng và thông báo đẩy đến trong –

4

Hãy thử này tôi sử dụng trong một trong những ứng dụng của tôi, tài khoản một biến trong ứng dụng delegate như một toàn cầu

ex: BOOL gotNotifcation; 

-(void)application:(UIApplication*)app didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    NotificationsViewController *notificationobject = [[NotificationsViewController alloc]init]; 
    [self.navigationController pushViewController:notificationobject animated:YES]; 
    gotNotifcation = YES; 
} 

Trong NotificationsViewController cho hành động nút quay lại nếu nó được tùy chỉnh nút

-(void)gotoback 
{ 
    AppDelegate *delegate =(AppDelegate *)[UIApplication sharedApplication].delegate; 

    if(delegate.gotNotifcation) 
    { 
     delegate.gotNotifcation = NO; 
     MessageListController *feed = [[MessageListController alloc] init]; 
     [self.navigationController pushViewController:feed animated:NO]; 
    } 
    else 
    { 
     [self.navigationController popViewControllerAnimated:NO]; 
    } 
} 
+0

bạn có thể cập nhật mã ur trong 3 nhanh chóng @Charan Giri không –

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