2

在我的应用程序的详细视图中,导航控制器的后退按钮似乎正在从一些不敬虔的表现中获取其颜色的线索。通过一条通往详细视图的路径,它是蓝色的;通过另一个,它是黑色的。在任何一种情况下,self.navigationController 对象中似乎都不存在后退按钮。

因此,这是一个详细视图:

我的应用程序的详细视图

这是此时导航控制器的快照:

在此处输入图像描述

我很确定我知道如何更改这个特定元素的颜色,但我不知道在哪里可以找到它。想法?

场地表视图控制器.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *show;

    if( [self.listType isEqualToString:@"showsByRegion"] )
    {
        NSString *venueIndex = [[self.allShows allKeys] objectAtIndex:[indexPath indexAtPosition:0]];
        int index = [indexPath indexAtPosition:1];
        show = [[self.allShows objectForKey:venueIndex] objectAtIndex:index];
    } else {
        int index = [indexPath indexAtPosition:(indexPath.length - 1)];
        show = [self.showsAtVenue objectAtIndex:index];
    }

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
                                                         bundle:[NSBundle mainBundle]];

    detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"InfoViewController"];

    detailViewController.showInfo = show;

    // Pass the selected object to the new view controller.
    [self.navigationController pushViewController:detailViewController animated:YES];

}

InfoViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView = [[self.view subviews] objectAtIndex:1];

    [self createInfoViewDictionary];
    [self addTopImage];
    [self setFrameForTableView];
    [self bindLabelsToProperties];

    [self.navigationController.navigationBar setTitleTextAttributes:[SHColors sharedInstance].navBarText];
}
4

6 回答 6

3

导航栏上的后退按钮属于后退按钮会将您发送到的视图控制器。IE

A --->B --->C

C的后退按钮属于B导航项,B的后退按钮属于A导航项。

这意味着你需要检查你在之前的 View Controller 中做了什么。

于 2013-10-15T15:07:13.663 回答
3

如果您获得不同的颜色是因为您从不同的视图控制器到达那里,并且这些视图控制器具有不同的 tintColor。

然后,您需要设置您想要使用的颜色:

- (void)viewDidLoad
{
    ....
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    ....
}

如果您想为所有导航栏设置相同的颜色,您可以使用 UIAppearance 代理在 AppDelegate 中设置它们(编辑:正如 Jordan Montel 所说)

于 2013-10-15T15:13:41.330 回答
2

如果要更改整个后标题颜色,可以在 AppDelegate的方法中设置tintColor导航栏的:didFinishLaunchingWithOptions

[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];

didFinishLaunchingWithOptions方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
   [[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
    return YES;
}
于 2013-10-15T15:12:16.423 回答
1

tintColor导航控制器的导航栏设置为您希望后退按钮的颜色。

self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

在 iOS 6 上,这会将整个栏设置为白色。

如果您设置导航栏的某些超级视图的色调颜色,则如果未设置,则后退按钮将继承它。

于 2013-10-15T15:07:01.967 回答
0

视图的tintColor属性设置后退按钮的不同颜色,如果没有设置,则从父视图继承。您可以通过在应用程序委托中执行此操作来为整个应用程序设置色调颜色:

window.tintColor = [UIColor purpleColor];

对于您的情况,您需要回溯并查看每个导航路径中各个颜色的来源并设置tintColor导航栏的属性。

于 2013-10-15T15:10:31.103 回答
0

就像@micantox 说的后退按钮来自以前的视图控制器。所以如果你想访问当前控制器可见的后退按钮,你必须访问呈现视图控制器,所以最好的方法是:

self.presentingViewController.navigationItem.backBarButtonItem
于 2013-10-15T15:31:15.903 回答