2012-01-03 2 views
1

У меня есть метка, которую я хочу изменить цвет фона при выборе кнопки. Он отлично работает, когда я впервые вхожу в представление, но когда я покидаю представление и возвращаюсь, он больше не работает, хотя я все еще могу получить доступ к метке по его тегу и прочитать его текст.Цвет фона не изменяется для UILabel

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]; 
+2

Я думаю, что вы можете сделать что-то ужасно неправильно здесь. С кодом "[self.navigationController pushViewController: self.navigationController.parentViewController animated: YES];" Это создаст циклический цикл с контроллером навигации, если вы добавите его родитель к себе. –

+0

Извините, я, возможно, не был ясен. Этот код вызывается из другого представления, так сказать, детского представления. Это еще проблема? – LittlePeculiar

+0

Да, это все равно будет проблемой. Скажем, вы добавляете свой контроллер навигации в свой экземпляр UIWindow в своем делете приложения, а затем вы нажимаете некоторые UIViewControllers на этот UINavigationController, когда вы вызываете «self.navigationController» в UIViewController, который вы ввели в стек навигации, это вернет экземпляр вашего UINavigationController, к которому вы добавили это представление. Затем вы вызываете parentViewController на свой UINavigationController, это в том, что я описал выше, будет UIWindow вашего App Delegate. –

ответ

0

Чтобы расширить свой код и, возможно, лучше понять, о чем я пытался прокомментировать выше.

UINavigationController* navigationController = [self navigationController]; 

UIViewController* parentViewControllerForNavigationController = [navigationController parentViewController]; 

Затем в вашем коде вы добавляете родительский ViewController к дочернему ViewController.

[navigationController pushViewController:parentViewControllerForNavigationController animated:YES]; 

Какой бы вы ни делали это, это вызовет серьезные проблемы. Я думаю, вы не совсем понимаете, как работает UINavigationController. Простое объяснение состоит в том, что это действительно просто итератор для списка (или очереди, если хотите) UIViewControllers (или подклассов UIViewControllers). Фактически, вы добавляете контроллер родительского представления в контроллер навигации, вызывая репликацию контроллера навигации.

Код:

[self.navigationController popViewControllerAnimated:YES]; 

Просто удаляет последний элемент из списка, он будет вызывать методы высвобождения и dealloc на UIViewController, который находится в конце стека UINavigationController. Это приведет к оживлению приложения к предыдущему представлению (поскольку аргумент animate является «YES»), вам вообще не нужно нажимать другое представление на стек навигации, и это похоже на то, что вы пытаетесь сделать ,

Однако, если вы, например, пытаетесь выполнить некоторые манипуляции навигации, такие как: У вас есть три контроллера вида, UIViewController A, B и C. The View Controller Корневой A. Нажимает В на навигационном контроллер затем выполнить некоторая функция в B и хотите, чтобы контроллер просмотра C был сдвинут в стек навигации, но когда вы нажмете назад в поле зрения C, вам будет предложено просмотреть A, а не View B, вы можете манипулировать массивом, возвращаемым вызовом [self navigationController] viewControllers] и удаление второго последнего объекта и изменение размера массива, а затем вызов [self navigationController] setViewControllers: «resizedArray»], но я бы использовал эту функцию в функции viewDidAppear в реализации контроллера C.

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