我正在用这段代码做的是抓取一个图像序列,抓住它的名字。然后将视图的标题设置为播放序列的序列名称,然后将标题设置回旧标题。
问题是导航栏上的标题似乎没有变化。 NSLogs正在输出正确的值。
我记得以前遇到过这个问题并用一些“刷新”方法来解决它。
以下是相关代码。
-(void)playSequence
{
if (([animatorViewController isAnimating] == FALSE) && (btnDisable == FALSE))
{
Sequence *tempSequence;
tempSequence = [fullStepList objectAtIndex:lastPlayedSequence];
self.title = [NSString stringWithFormat:@"Assembly - %@", tempSequence.subName];
NSLog(self.title);
[self startAnimator:tempSequence.imageNameScheme forNumFrames:tempSequence.numberOfFrames playInReverse:FALSE];
tempSequence = nil;
tempSequence = [fullStepList objectAtIndex:queuedSequence];
self.title = [NSString stringWithFormat:@"Assembly - %@", tempSequence.subName];
NSLog(self.title);
tempSequence = nil;
}
}
编辑:这种更改标题的方法在本课程的其他地方工作。当试图将它设置为两次导致问题时,问题似乎就出现了。
EDIT2:它实际上是一个接一个地运行两个标题更改......事实上它将它设置回到之前就是让我失望。
答案 0 :(得分:1)
导航项可能包含四个内容:leftBarButtonItem,rightBarButtonItem,title和titleView。当您需要更改标题时,您应该将标题分配给navigationItem的title属性,而不是视图的title属性。所以它看起来像:
self.navigationItem.title = [NSString stringWithFormat:@"Assembly - %@", tempSequence.subName];
self.title指向未在navigationBar中显示的viewControllers标题。
答案 1 :(得分:1)
在主运行循环执行之前,标题似乎不会更新。除非-startAnimator:forNumFrames:
在返回之前调用主运行循环执行,否则您将看不到更改。
答案 2 :(得分:0)
如果您在另一个视图中托管UINavigationController,则需要执行以下操作:
self.yourNavigationController.title = @"title";
而不是
self.title = @"blah"
否则您只是更改托管视图导航器的视图的标题。只是一个猜测。
答案 3 :(得分:0)
可怕的P.E.B.K.A.C.错误是造成这种混乱的原因。它实际上是一个接一个地运行两个标题更改......事实上它将它重新设置为上一个让我失望。
答案 4 :(得分:0)
我最近发现自己处于类似情况。我的视图标题由带有NSMutableAttributedString的标签组成。每当我更新我的标题时,都会致电[self reloadInputViews]
。