2013-07-23 4 views
0

UINavigationController를 사용하고 최상위 UIViewController의 setToolbarItems 메소드를 사용하여 툴바 항목을 설정하고 있습니다. 이것은 사용자가 화면을 처음 방문하거나 사용자가 화면을 다시 방문 할 때 처음에는 잘 동작합니다. 그러나 나는 또한 서버와 통신하는 배경 스레드가 있습니다. 서버는 도구 모음에서 일부 단추를 제거하거나 응용 프로그램 논리로 인해 아이콘을 변경하라는 메시지를 보냅니다. 그 때 주 스레드에서 현재 UIViewController의 setToolbarItems 메서드를 호출하면 툴바 항목이 업데이트되지 않습니다. 그래서 전체보기를 다시로드하지 않고 UINavigationController의 UIToolbar를 다시로드하는 방법은 무엇입니까?다시로드하지 않고 UINavigationController의 UIToolbar를 다시로드하십시오.

감사합니다.

답변

0

나는 비슷한 문제가있었습니다. 사용자가 '설정'에서 색 구성표를 변경하기 위해 내 앱을 떠날 때 탐색 막대, 텍스트 및 색 속성을 업데이트해야합니다. 탐색 막대 색상을 업데이트 할 수 있었지만 탐색 막대 텍스트 색상이 업데이트되지 않았습니다. 내 솔루션 : '스토리 보드'를 사용하지 않습니다. 내 AppDelegate.h에서 나는이 :

@property (….) CustomViewController *viewController; 
@property (….) UINavigationController *nav; 

내가 AppDelegate.m하지 @synthesize했다. 그런 다음

…. 
self.viewController = [[CustomViewController alloc ….initWithNib…. 
[self setNavControllerAttributes]; // My solution is in this method 
self.window.rootViewController = self.nav; 
…. 

내가 응용 프로그램의 실행 *navnil 심지어 처음 설정하고 알고 있지만 작동하고 것 AppDelegate.m

- (void) setNavControllerAttributes 
{ 
    self.nav = nil; 
    self.nav = [[UINavigationController alloc… 
    // Set my attributes with dictionary options and such 
    self.window.rootViewController = self.nav; 
} 

에서 대부분의 작업은 않는 방법 AppDidFinishLaunchingWithOptions:에서 사용자가 앱을 떠났다가 다시 시작하면 nil으로 설정됩니다. 내 유일한 관심사는 rootViewControllerwindow에 재 할당한다는 사실이지만 ARC가 내 메모리 관리를 담당 할 것이라고 생각합니다. 나는 당신이 당신의 필요에 맞게 조정할 수 있습니다 확신 내 applicationWillEnterForeground:

[self setNavControllerAttributes]; 

에 내가 다시 출시에 다시 메서드를 호출하여이 작업을 확인하십시오. 조심해야 할 유일한 것은 *navnil으로 설정하면 하위 컨트롤러를 할당 해제하고 데이터를 잃을 수 있기 때문에 데이터를 저장하는 것입니다. 이것은 iOS 6에서 작동합니다. iOS 7에 다른 접근 방식이 필요하다는 것을 알게되면 다시 돌아와서 업데이트 할 것입니다. 누구든지 추가 제안 사항이 있으면 조언을 취할 것입니다. 이 도움이 되었기를 바랍니다.

applicationWillEnterForeground:에서 메모리와 성능 오버 헤드를 최소화하기 위해 더 나은 것을 할 수 있습니다. 현재 이것은 첫 번째보기 컨트롤러를 업데이트하는 나의 방법입니다

if (self.viewController.isViewLoaded) { 
    [self setNavControllerAttributes]; 
    [self.viewController viewWillAppear:YES]; 
} 
if (self.viewController.view.window) { 
    // Perform other action if code above doesn't work 
} 
관련 문제