2016-06-13 7 views
0

Я пытаюсь использовать результаты прожектора, чтобы направлять пользователя в соответствующий раздел в моем приложении.iOS: Как нажать на DetailView

В главном меню есть несколько кнопок, позволяющих перейти в разные области приложения, одним из которых является телефонный справочник, который находится внутри собственного SplitViewController. У MasterView есть список пользователей в TableView, а у DetailView есть данные о товаре.

В настоящее время у меня есть следующее в моем AppDelegate.m.

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { 
    if ([userActivity.activityType isEqualToString:CSSearchableItemActionType]) { 

     // uid = an Id field unique for each record 
     NSString *uid = userActivity.userInfo[CSSearchableItemActivityIdentifier]; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
     UINavigationController *navController = nil; 
     navController = [storyboard instantiateViewControllerWithIdentifier:@"PhoneDirectory"]; 

     if (navController != nil) { 
      [[[self window] rootViewController] presentViewController:navController animated:YES completion:nil]; 
     } 
    } 

    return YES; 
} 

Вот моя структура, мы надеемся, что это хорошая работа, иллюстрирующая это.

Navigation Controller 
| 
|-- Main View 
    |-- About View 
    | 
    |-- SplitView Controller (StoryboardID: PhoneDirectory) 
     |-- Master View Controller 
     |-- Detail View Controller 
    |--Another View 

То, что я хочу, чтобы представить DetailView с информацией о пользователе. На устройствах, которые показывают MasterView и DetailView, я хотел бы, чтобы MasterView выглядел так, как будто строка была нажата.

Как я могу это сделать? Как передать uid на номер MasterView, а затем имитировать касание, чтобы имитировать касание соответствующей строки.

Примечание: мои данные на MasterView настроен как Dictionary из Arrays, в случае, что имеет значение в том, как найти правильный пользователя по Uid.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

ответ

1

Внутри MasterViewController.h

-(void)selectRowWithID:(NSString*)uid; 

Внутри MasterViewController.m

-(void)selectRowWithID:(NSString*)uid 
    { 
     NSPredicate* predicate = nil; 
     //Your logic to find the match from array; 

    NSArray* matches = [dataSourceArray filteredArrayUsingPredicate:predicate]; 

    if([matches count] > 0) 
    { 
     NSDictionary* match = matches[0]; 

     NSIndexPath* targetIndexPath; 
     // Your logic to find out the indexPath for this match 


     // Ask the table to select the row programatically 
     [self.tableView selectRowAtIndexPath:targetIndexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle]; 

     // Manually forward the event for this, as if user touched the cell 
     // SDK won't forward this method call for programmatic cell selections 
     [self tableView:self.tableView didSelectRowAtIndexPath:targetIndexPath]; 
    } 
    else 
    { 
     NSLog(@"'uid' not found in the master table dataSource"); 
    } 
} 

Это работает здорово для меня большинство моих проектов.

+0

Awesome! Благодарю. Но как я могу назвать этот метод? «AppDelegate»? «NavController» ссылается на «SplitViewController». Когда я пытаюсь использовать 'PhoneDirectoryMasterViewController * master = [[navController viewControllers] firstObject]; [master selectRowWithId: uid]; 'after' presentViewController' Я получаю сообщение об ошибке' - [UINavigationController selectRowWithId:]: unrecognized selector'. – RoLYroLLs

+0

Хорошо, я пробовал это и, кажется, работает, но это правильный способ получить представление мастера? 'PhoneDirectoryMasterViewController * master = [[[[[NavController viewControllers] firstObject] childViewControllers] firstObject];' – RoLYroLLs

+0

@RoLYroLLs Да, вам нужно пройти через свой 'masterViewController', перейдя в иерархию' UISplitViewController'. Как работает решение, не могли бы вы пометить его как правильный ответ? Это может быть полезно для некоторых других разработчиков. –