iOS:如何推送到DetailView

时间:2016-06-13 03:55:52

标签: ios objective-c iphone segue spotlight

我尝试使用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提供用户的信息。在显示MasterViewDetailView的设备上,我希望MasterView看起来好像是在点击了行。

我能做到这一点的最好方法是什么?如何将 uid 传递给MasterView,然后模仿点按以模拟相应行上的触摸。

注意:MasterView的数据设置为Dictionary Arrays,以防如何通过<找到合适的用户强> UID

如果您需要更多信息,请告诉我。

1 个答案:

答案 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");
    }
}

对于我的大多数项目来说,这对我来说非常有用。