我正在听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;
}
答案 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;
}
}
标签选择
为了在标签栏中选择一个标签,我会使用一种方法,使用字典将每个标签栏项目映射到一个有意义的名称。这样,您可以选择给定的选项卡,无论其位置如何。