2013-07-16 110 views
0

我一直在Xcode中设置一个类似于iOS邮件应用程序的UI,但第二个popover视图控制器不会一直播放。我试图导航栏的“交易”标题设置为帐户的名称,但它反而会设置为DetailViewController标题:如何设置NavigationItem/NavigationBar的标题

之前,我选择一个帐户:http://i.stack.imgur.com/zo75V.png

我后选择“新帐户”:http://i.stack.imgur.com/8DPBB.png

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    Account *account = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
    self.transactionViewController.navigationItem.title = account.name; 
} 

我用上面的代码来设置标题,但标题设置了错误的viewController ... 此相同的代码不会产生任何结果都适用于iPhone版。

编辑: 我其实本指南中发现这个问题的答案:Passing Data between View Controllers

的关键是使用-prepareForSegue:sender:方法来得到正确的viewController,并设置其标题。这也允许您将任何数据从一个ViewController传递到另一个ViewController,只要您使用Segue在它们之间切换,我现在使用它来设置交易帐户并获取帐户名称以设置为seque.destinationViewController.navigationItem.title属性

谢谢每个人都需要您的帮助

+0

你想设置标题'Transaction'到DetailViewController? – soryngod

+0

不,我想设置的帐户名称匹配我的TransactionViewController标题和DetailViewController应保持不变 –

+0

在这种情况下,标题是“新帐户” –

回答

2

每个视图控制器都有一个navigationItem属性,每个导航项都有一个title属性。要设置视图控制器的导航栏中显示的标题,您可以简单地设置视图控制器的navigationItem.title,就像你在做什么一样。

我用上面的代码来设置标题,但标题设置了错误的viewController

这听起来像你正确设置标题,但也许是设置错误的标题视图控制器。它看起来像 您在问题中提到的方法是在“主”视图控制器中,即屏幕左侧的那个,并且它的transactionViewController属性指向“详细信息”视图控制器。从你的评论中,我认为你要在“主”一侧创建一个新的视图控制器并将其推到导航堆栈上,并且它是那个你想要标题为“新帐户”的视图控制器(或者是任何帐户的名称被选中)。如果这一切都正确,那么您应该在代码中查找创建新控制器的位置,并将navigationItem.title设置为适当的字符串。

一个重要的问题是:什么对象试图设置新的视图控制器的标题?在你上面的代码中,你正试图从父控制器中完成它。由于您使用的是故事板,而且新的视图控制器是由segue创建的,因此您无法通过...didSelectRowAtIndexPath...方法轻松访问新的视图控制器。如果您想继续在父级中设置标题,则可以实施-prepareForSegue:sender:以设置标题。另一方面,任何视图控制器都应该或多或少地负责它的表现方式,所以你可能会考虑让子视图控制器设置自己的标题,而不是让父级控制器执行它。父级可能已经使用-prepareForSegue:sender:在子视图控制器中设置帐户。也许孩子有一个account属性,父母呼叫设置此信息?您可以实现该属性的setter来设置视图控制器的标题:

- (void)setAccount:(Account*)account 
{ 
    if (account != _account) { 
     _account = account; 
     self.navigationItem.title = account.name; 
    } 
} 
+0

的'transactionViewController'是我的主人视图控制器的特性和类型是'TransactionViewController *的'。 如何确保我拥有正确的视图控制器? –

+0

您所描述的一切都是正确的,只是我使用故事板并使用表单元格中的segues来推送新的视图控制器。这是否有很大的不同?我在界面生成器中设置了标题,但我想在运行时动态更改它。 –

+0

@NicolaLucasBuescher好吧,我已经更新了有关如何将故事板做一些这方面的更多信息问题的答案。 – Caleb

2

它是self.navigationItem.title = account.name;。如果我看得很清楚,桌子就在MasterViewController之内,并且主人有一个作为根的导航控制器。

+0

这并不恰克细节,但它仍然没有将“交易”到“新帐户” –

+0

是否后退按钮将标题更改为新帐户? – soryngod

+0

是的,但帐户标题也更改为“新帐户”。 –