1

我正在使用UITabBarController基于 iPhone 的应用程序。我的应用程序有5 个水龙头。在我的第四次点击 UIViewController 有一个 Child UIViewController。我的第一个RootViewController屏幕标题是“所有消息”。我的第二个 UIViewController 名称是“对话”。

屏幕流程是点击 4 -> 所有消息 -> 对话

All Messages 包含UITableView因此,如果用户单击 tableview 中的任何消息,我们会将用户带到对话屏幕 ( UIViewController)。此屏幕显示特定用户消息。

从这个子 UIViewController 我必须将父视图控制器的标题名称从“所有消息”更新为“新消息(1)”,并且后退按钮名称应该从“所有消息”更改为“新消息(1)”

我已按照以下代码更新屏幕标题。此代码位于名为 Conversation screen 的子视图控制器中。

AllMessagesViewController *mesViewController = [[AllMessagesViewController alloc] init];
mesViewController.navigationItem.title = @"New Messages(1)";

任何人请帮助我哪里做错了?这种做法正确吗?请帮助我做到这一点。提前致谢。

4

2 回答 2

1

尝试使用NSNotificationCenter.

AllMessagesViewController声明一个方法时:

- (void)changeTitle:(NSString *)newTitle;

然后为通知事件注册视图控制器

[[NSNotificationCenter defaultCenter] addObserver:self 
                             selector:@selector(changeTitle:) 
                                name:@"ChangeTitleEvent" object:nil];

然后,当您要更改标题时,ConversationViewController请发送通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeTitleEvent"
                                               object:@"New Message (1)"];

此方法将调用changeTitle:方法,AllMessagesViewController因此您只需使用参数更改标题newTitle

- (void)changeTitle:(NSString *)newTitle
{
   self.title = newTitle;
}
于 2012-09-19T12:35:21.060 回答
1

做这个:

NSArray *arrControllers = [self.navigationController viewControllers];
if([[arrControllers objectAtIndex:[arrControllers count]-2] isKindOfClass:[AllMessagesViewController class]])
{
  AllMessagesViewController *objAllMessagesViewController = (AllMessagesViewController *)[arrControllers objectAtIndex:[arrControllers count]-2];
  objAllMessagesViewController.title = @"New Messages(1)";
}
于 2012-09-19T12:41:09.080 回答