2013-10-15 2 views
2
-(UINavigationController *) navigationControllerOfParentOrSelf //These 2 functions are short so I just go ahead 
{ 
    UIViewController * current=self; 
    while (current) { 
     UINavigationController * nav = current.navigationController; 
     if (nav) { 
      return nav; 
     } 
     current=current.parentViewController; 
    } 
    return nil; 
} 

-(UITabBarController *) tabBarControllerOfParentOrSelf 
{ 
    UIViewController * current=self; 
    while (current) { 
     UITabBarController * tc = current.tabBarController; 
     if (tc) { 
      return tc; 
     } 
     current=current.parentViewController; 
    } 
    return nil; 
} 

Похож на много повторяющегося кода.Как сделать этот UINavigationController более удобным для кода?

В основном я просто хочу знать, находится ли UIViewController внутри UINavigationController или нет. Дело в том, navigationController свойство часто NIL, когда UIViewController является childViewController

+0

Ваш цикл не имеет никакого смысла. Он будет выполняться один раз, если свойство 'navigationController' не равно нулю. Если это ноль, он будет работать вечно. –

+0

исправлено. Ладно, это не проблема. –

ответ

2

Я хотел бы предложить что-то вроде этого:

-(UINavigationController *) navigationControllerOfParentOrSelf 
{ 
    return [self parrentControllerOfParrentOrSelfWithGetter: @selector(navigationController)]; 
} 

-(UITabBarController *) tabBarControllerOfParentOrSelf 
{ 
    return [self parrentControllerOfParrentOrSelfWithGetter: @selector(tabBarController)]; 

} 

- (id) parrentControllerOfParrentOrSelfWithGetter: (SEL) getter 
{ 
    UIViewController * current=self; 
    while (current) { 
     id res = [current performSelector: getter]; 
     if (res) { 
      return tc; 
     } 
     current=current.parentViewController; 
    } 
    return nil; 
} 
+0

Хороший ответ, лучше, чем у меня :) –

1

Вы можете сделать это нравится:

-(id) getViewController:(BOOL)isNavController 
{ 
    id controller = nil; 
    if(isNavController) 
    { 
     controller = self.navigationController; 
    } 
    else 
    { 
     controller = self.tabBarController; 
    } 

    return controller; 
} 
+0

Это улучшение. Дело в том, что мы используем переменную bool. Как насчет того, хотим ли мы добавить больше свойства. Я что-то думаю по исполнителю (@navigationController) –

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