我有一个标签,我想更改选择按钮时的背景颜色。它在我第一次进入视图时工作正常,但是当我离开视图并返回时,它仍然无法工作,即使我仍然可以通过其标签访问标签并阅读其文本。
UILabel *labelToFlip = (UILabel *)[self.view viewWithTag:labelTag];
if (button.selected)
{
NSLog(@"selected");
NSLog(@"label text:%@:%d", labelToFlip.text, labelToFlip.tag);
[labelToFlip setBackgroundColor:[UIColor blackColor]];
[labelToFlip setTextColor:[UIColor whiteColor]];
}
这就是我回到我的观点的方式。再次,我可以到标签阅读文本没有问题,只是无法改变背景颜色或文字颜色。
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController pushViewController:self.navigationController.parentViewController
animated:YES];
答案 0 :(得分:0)
扩展您的代码,或许可以更好地理解我上面尝试评论的内容。
UINavigationController* navigationController = [self navigationController];
UIViewController* parentViewControllerForNavigationController = [navigationController parentViewController];
然后在您的代码中,您将父ViewController添加到子ViewController。
[navigationController pushViewController:parentViewControllerForNavigationController animated:YES];
无论你在哪里执行此操作都会导致一些重大问题。我想您还不太了解UINavigationController的工作原理。简单的解释是它实际上只是UIViewControllers(或UIViewControllers的子类)的列表(或者你喜欢的队列)的迭代器。实际上,将父视图控制器添加到导航控制器的方式是导致导航控制器的复制。
代码:
[self.navigationController popViewControllerAnimated:YES];
只需从列表中删除最后一项,它将调用位于UINavigationController堆栈末尾的UIViewController上的release和dealloc方法。这将导致App动画回到上一个视图(因为animate参数为'YES'),您根本不需要将另一个视图推送到导航堆栈,这就是您尝试做的事情
但是,如果您尝试执行某些导航操作,例如: 你有三个视图控制器,UIViewController A,B和C. 根视图控制器是A.你将B推到导航控制器上,然后在B中执行一些功能,并希望将视图控制器C推到导航堆栈上,但是当您在视图C中按回来时,您希望看到视图A而不是View B你可以通过调用[self navigationController] viewControllers]来操作返回的数组并删除第二个最后一个对象并调整数组大小然后调用[self navigationController] setViewControllers:“resizedArray”]但是我会在viewDidAppear函数在视图控制器C的实现中。