我尝试使用Spotlight结果来引导用户访问我应用中的相应部分。
MainView有一些按钮可以转到应用程序的不同区域,其中一个是电话目录,它位于自己的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
如果您需要更多信息,请告诉我。
答案 0 :(得分: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");
}
}
对于我的大多数项目来说,这对我来说非常有用。