2013-10-15 2 views
2

В подробном представлении моего приложения кнопка обратной кнопки навигатора, похоже, берет сигналы для своего цвета из какого-то нечестивого проявления. Через один путь к подробному виду, он синий; через другой он черный. В любом случае кнопка «Назад», похоже, не существует в объекте self.navigationController.Не удается получить доступ к кнопке управления навигатором

Так вот деталировка:

detail view of my app

А вот снимок навигационного контроллера в данный момент:

enter image description here

Я уверен, что я знаю, как изменить цвет этого конкретного элемента, но я не знаю, где его найти. Идеи?

VenueTableViewController.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]; 
} 

ответ

3

Если вы получаете разные цвета, потому что вы попадаете туда с разных контроллеров view, а у тех, у которых viewcontrollers есть разные tintColor.

Затем вам нужно установить цвет, который вы хотите использовать:

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

Если вы думаете, в имеют один и тот же цвет для всех панели навигации, вы можете использовать UIAppearance прокси, чтобы установить их в AppDelegate (Editted : как сказал Иордания Монтель)

+0

Yep I upvote you :) Кроме того, добавив эту строку кода в свой 'viewDidLoad' –

+0

Вы правы, я отредактирую его – Alex

+0

Это изменяет цвет bg панели навигации, а не цвет текста кнопок. – dclowd9901

1

Установите tintColor навигационной панели контроллера навигационного к любой цвет вы хотите, чтобы кнопка назад, чтобы быть.

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

На iOS 6 это установило бы всю полосу белого цвета.

Если вы установили цвет оттенка некоторого надзора на панели навигации, кнопка возврата наследует его, если он не установлен.

3

Кнопка «Назад» на панели навигации относится к контроллеру представления, на который будет отправлена ​​кнопка «Назад». т.е.

A --->B --->C

C 's кнопку возврата принадлежит B элементов навигации и B' кнопку s назад принадлежит A элементов навигации.

Это означает, что вам нужно проверить, что вы делаете в предыдущем View Controller.

+0

В контроллере представления представления, я поставил '[[self.navigationItem leftBarButtonItem] setTitleTextAttributes: [SHColors sharedInstance] .navBarText forState: UIControlStateNormal]; '(' backBarButtonItem' был 'nil'). Это не исправить. – dclowd9901

+0

Интересно, что когда я 'NSLog (@"% @ ", [self.navigationItem leftBarButtonItem] .title);' в представлении контроллера представления, он говорит, что заголовок бара является 'Back' (в отличие от того, что вы видите на изображении , который заканчивается «List of Shows». Я не знаю, где и как это делается, но это не делается мной. – dclowd9901

+0

Это по умолчанию (и сгенерировано для вас в пути). чтобы сделать что-то вроде: 'presentingVC.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: myTitle style: UIBarButtonItemStylePlain target: nil action: nil];', а затем установить атрибуты текста заголовка – micantox

0

Свойство представлений задает разные цвета кнопки «Назад» и наследуется от супервизоров, если ни один не установлен. Вы можете установить оттенок цвета для всего вашего приложения, делая это в приложении делегат:

window.tintColor = [UIColor purpleColor];

Для вашей ситуации, вам нужно трассировка и увидеть, где отдельные цвета идут от каждого пути навигации и установите tintColor свойство навигационной панели.

2

Вы можете установить tintColor вашей навигационной панели в методе didFinishLaunchingWithOptions на вашем AppDelegate, если вы хотите, чтобы изменить весь задний цвет заголовка:

[[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; 
} 
0

Как и @micantox, обратная кнопка поступает с предыдущего контроллера. Так что если вы хотите получить доступ назад кнопки видимой для текущего контроллера, вы должны получить доступ представления вида контроллера, поэтому лучший способ получить то есть:

self.presentingViewController.navigationItem.backBarButtonItem 
+0

Пробовал это, и он ничего не сделал. – dclowd9901

Смежные вопросы