2016-03-02 6 views
0

Я использую следующий код, чтобы получить имя контроллера зрения до сих пор управление судном,Как получить имя контроллера вида?

NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; 
NSLog(@"%@",navigationArray); 

, но я использую этот метод в раскадровке этого не работает может любой помощи, чтобы исправить эту

+0

вы попробуйте принести текущий вид имя контроллера –

+3

То есть не имя контроллера представления, что это массив экземпляров вид контроллера. – trojanfoe

+0

да, как использовать этот код в раскадровке, могу ли я использовать @ trojanFoe – Arun

ответ

2

использование NSStringFromClass(). Он возвращает имя класса как string.

, если вы хотите, чтобы принести некоторое имя вид контроллера, сделать как

NSString *viewName = NSStringFromClass([yourviewControllerName class]); 

, если вы хотите, чтобы принести текущий контроллер представления, сделать как

NSString *viewName = NSStringFromClass([self class]); 

принести предыдущие Viewcontrollers

Вы можете использовать UINavigationController: viewControllers:

@property (неатомическая, копия) NSArray * viewControllers

NSArray * allViewController = self.navigationController.viewControllers; 

другого выбор

Количество прибудет из viewcontrollers имеющегося в навигационном использовании как

NSInteger totalCount = self.navigationController.viewControllers.count; 

Обновлено

UIViewController *allViewController = self.navigationController.viewControllers[totalCount - 2]; 
Class previousVCClass = [allViewController class]; 
NSString *className = NSStringFromClass(previousVCClass); 
+0

Мне нужно получить имя всего контроллера представления, на который я перешел., – Arun

+0

@Arun - проверить обновленный ответ –

+0

он возвращает NULL, код i опубликовали работы в xib bur в раскадровке, я не смог получить результат. – Arun

2

Вам придется перебирать по навигации стека и использовать решение Anbu, чтобы получить их имя класса:

NSMutableArray* viewControllersNames = [[NSMutableArray alloc] init]; 
for(UIViewController *vc in self.navigationController.viewControllers) 
{ 
    NSString *vcName = NSStringFromClass([vc class]); 
    [viewControllersNames addObject:vcName]; 

} 

В собственности self.navigationController.viewControllers, все ваши viewcontrollers, которые не были выскочили еще сохраняются , Здесь мы повторяем их и добавляем имена классов в массив. Ваш первый ViewController будет на 0 индексе массива, а ваш последний (контроллер View, который в настоящее время присутствует) будет находиться в count-1.

Это решение будет работать только в том случае, если вы представляете свой просмотрконтроллеры через навигационный контроллер. Если вы используете модальную презентацию, это не сработает. Поскольку ваше сообщение создает впечатление, что вы используете навигационный контроллер, и вы говорите, что делаете это, поэтому решение также подходит для подхода Nav controller.

+0

кратчайший и правый ответ. Я поддерживаю. @Arun, используйте его. Если вам нужен заголовок контроллера вида, как сказал Андрей Гордеев в комментариях по вашему вопросу, тогда код будет чем-то вроде «NSString» vcTitle = vc.title; [viewControllerNames addObject: vcTitle]; ' – Massmaker

0

Это может помочь вам решить проблему.
На раскадровке выберите каждый контроллер вида и перейдите к инспектору класса. Затем установите идентификатор раскадровки, уникальный для каждого контроллера представления.
Вы можете получить доступ к экземпляру любого контроллера вида.

id controller = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ControllerIdentifier"]; 


Другой способ

NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; 
    id controller1 = [navigationArray objectAtIndex: 0]; 
    id controller1 = [navigationArray objectAtIndex: 1]; 
    .... 
+0

И этот код сработает, скажем, если есть только один ViewController, массив и индекс уходят из привязки. Плюс доступ к VC не является его вопросом. – NSNoob

+0

Привет @NSNoob Я только что предложил возможный путь. Вы можете построить свою логику согласно вашему требованию. –

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