如何从应用程序委托中选择UITableView项?

时间:2015-02-08 22:34:22

标签: ios objective-c uitableview push-notification apple-push-notifications

我正在听APN在与特定朋友的对话中有新消息。收到它后,我想在选项卡导航中选择第二个选项卡,然后选择传入的有效负载中指定的对话。我得到它的工作,假设我们已通过身份验证并显示正确的选项卡,但现在我想在表中选择正确的单元格,我不知道如何做到这一点。

此外,我想选择一个特定的控制器,而不是硬编码这是标签2的事实,但我也无法做到这一点。

以下是它的内容:

UITabBarController *tabViewController = (UITabBarController *) self.window.rootViewController;
tabViewController.selectedIndex = 1;

以下是更多背景信息:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)launchOptions
{
    DDLogDebug(@"didReceiveRemoteNotification got launch options: %@", launchOptions);

    NSDictionary *apsInfo = [launchOptions objectForKey:@"aps"];
    NSString *message = [apsInfo objectForKey:@"alert"];

    NSNumber *fromUserId = [launchOptions objectForKey:@"from_user"];
    if (fromUserId) {
        DDLogDebug(@"Got message from friend id %@", fromUserId);
        [self showConversationWithfriendIdWhenPossible:fromUserId message:message];
    }
}

- (void)showConversationWithfriendIdWhenPossible: (NSNumber *)friendId message:(NSString *) message {
    FriendMatch *friend = [FriendMatch MR_findFirstByAttribute:@"id" withValue:friendId];

    DDLogDebug(@"Got friend %@", friend.firstName);

    if (message) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Notification"
                                                        message:message
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
    }

    if (![self.window.rootViewController isKindOfClass:[UITabBarController class]]) {
        self.showConversationWithfriendId = friendId;
        DDLogDebug(@"Not showing the conversation because the controller is %@", NSStringFromClass([self.window.rootViewController class]));
        return;
    }
    self.showConversationWithfriendId = nil;
    DDLogDebug(@"val: %@", (UITabBarController *) self.window.rootViewController);
    UITabBarController *tabViewController = (UITabBarController *) self.window.rootViewController;
    tabViewController.selectedIndex = 1;
}

1 个答案:

答案 0 :(得分:0)

首先,您应该将类​​名中每个单词的首字母大写,以便friendMatch成为FriendMatch。这将允许您轻松区分实例变量和类,并为您提供更多的理智。

表格行选择

我假设你在某个地方有一些朋友列表 - 我称之为friends。此代码选择行,并将表格滚动到选区,以便选择显示在显示的单元格的中间。排序表后,此操作也很有用。

int numFriends = friends.count;
for (int i = 0; i < numFriends; i++)
{
    NSDictionary *dict = friends[i];
    if (dict == matchedFriend)
    {
        NSIndexPath *selectedIndexPath = [NSIndexPath indexPathForRow:i inSection:0];
        [_friendsTable scrollToRowAtIndexPath:selectedIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
        [_friendsTable selectRowAtIndexPath:selectedIndexPath animated:FALSE scrollPosition:UITableViewScrollPositionNone];

        break;
    }
}

标签选择

为了在标签栏中选择一个标签,我会使用一种方法,使用字典将每个标签栏项目映射到一个有意义的名称。这样,您可以选择给定的选项卡,无论其位置如何。