我有很多.xib文件,我尝试以编程方式重新创建它们。
唯一的问题是,我无法再自定义导航栏了。
De版本函数由具有多个条形按钮项的另一个视图调用,因此代码对于其他函数是通用的。
- (void)versions
{
VersionsViewController *verController = [[VersionsViewController alloc] initWithDocument:document];
[verController setDelegate:self];
[self loadPopupView:verController];
[verController release];
}
- (void)loadPopupView:(UIViewController *)viewController
{
if (popOverController != nil && [popOverController isPopoverVisible])
{
[popOverController dismissPopoverAnimated:YES];
}
if(![popOverController isPopoverVisible] || ![popOverController.contentViewController isKindOfClass:[viewController class]])
{
popOverController = [[UIPopoverController alloc] initWithContentViewController:viewController];
popOverController.popoverContentSize = CGSizeMake(320, 500);
UIBarButtonItem *buttonLocation;
if([viewController isKindOfClass:[CommentaryViewController class]])
buttonLocation = commentaryButton;
else if([viewController isKindOfClass:[PropertiesViewController class]])
buttonLocation = propertiesButton;
else
buttonLocation = versionsButton;
[popOverController presentPopoverFromBarButtonItem:buttonLocation permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}
VersionsViewController.m
- (id)initWithDocument:(Document *)doc
{
self = [super init];
if(self)
{
self.document = doc;
self.title = @"other title"; //does not work either
//I just tried everything I could think of :P
self.navigationController.navigationBar.tintColor = [UIColor orangeColor];
self.navigationItem.titleView.backgroundColor = [UIColor redColor];
self.navigationController.navigationItem.titleView.backgroundColor = [UIColor greenColor];
self.navigationController.tabBarController.tabBar.backgroundColor = [UIColor blueColor];
self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor];
}
return self;
}
有人能看到我做错了吗?
编辑:
来自self.title和self.navigationController.title的NSLOG都是'null'当我创建一个navigationController时,添加视图并将navigationController添加到弹出窗口我得到2个条形图然后我可以设置navigationController的标题,但仍然不是颜色。
答案 0 :(得分:2)
好奇:如果你有工作的nib文件,为什么要以编程方式重新创建它们?
在initWithDocument:
中,您还没有分配nvaigationController
。您需要手动构建其中一个,并在其中安装VersionViewController
(完成后将设置navigationController
)。自动完成所有这些工作是我们使用nib文件的原因之一。
编辑任何时候“没有任何反应”检查您发送消息的对象是否为nil
。当你到达时,我确定navigationController
仍然是nil
。您还应NSLog
您关心的对象并查看其地址。您可能不小心创建了多个视图或多个导航控制器。当你尝试手工构建这些东西时,这是很常见的。在大多数情况下,笔尖是正确的解决方案。
答案 1 :(得分:0)
- (void)versions
{
VersionsViewController *verController = [[VersionsViewController alloc] initWithDocument:document];
[verController setDelegate:self];
UINavigationController *navC = [[UINavigationController alloc] initWithRootViewController:verController];
[self loadPopupView:navC];
[verController release];
[navC release];
}