2012-11-05 2 views
1

Xcode 4.5를 사용하고 iOS 5 이상을 타겟팅합니다.
사용자가 기본보기의 배경을 변경할 수있는 popover가 있습니다.popover에서보기 새로 고침

"버튼"을 탭하면 변경 사항을 보려면 두 번 살짝 눌러야합니다.
NSNotification을 사용하고 있습니다. 나는 위임을 시도했지만 아직 아무것도하지 않는다.
도움이나 조언을 주시면 감사하겠습니다.

viewWillAppear에서

:

// nav button is for background image selection 
    navigationBtn.tag = buttonTag; 
    [navigationBtn setBackgroundImage:[UIImage imageNamed:tempImage] forState:UIControlStateNormal]; 

    if (selectFlag) { 
     [navigationBtn addTarget:self action:@selector(BGSelected:) forControlEvents:UIControlEventTouchUpInside]; 
    } else { 
     navigationBtn.adjustsImageWhenHighlighted = NO; 
    } 

및 선택 방법 :

- (void)BGSelected:(id)sender { 
    self.bgtag = [sender tag]; 
    SettingsDAO *settingsDao = [[SettingsDAO alloc] init]; 

    if ([self.currentView isEqualToString:@"New_Journal"]) 
    { 
     NSLog(@"Update Journals Background"); 
     [settingsDao updateJournalBackgroundId:self.journalId withBackgroundId:self.bgtag]; 
    } 
    // notification to let EntryView know the background has changed 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"aBackgroundChanged" 
                object:self]; 

    [settingsDao release]; 
} 

NSNotification 방법은 : 당신은 스토리 보드를 사용하고있는 경우

- (void)aBackgroundChanged:(NSNotification *)notification { 
    [self invalidate]; 
    [self reloadSettings]; 
} 
+0

알림 위임 주제를 다루는 적절한 방법입니다. popover 호출자가 해당 알림을 수신하는지 확인해야합니다. aBackgroundChange를 NSString 상수로 만들 것을 제안합니다. 또는 popover 컨트롤러의 대리자가 nil이 아닌지 확인하십시오. – Leonardo

+0

알림을 NSString 상수로 만들려면 어떻게해야합니까? 왜 필요합니까? 호출자가 듣고 있습니다 ... ViewDidLoad에 옵저버가 있습니다. popover가 호출되기 전에 뷰가로드 될 때 다른 어딘가에 있어야합니까? –

+0

다음과 같이 상수를 만듭니다. NSString * const BackgroundChange = @ "aBackgroundChange"; 잘못 입력하는 것을 피할 것이고 가장 중요한 Xcode는 자동 완성 될 수 있습니다. popover를 만든 직후 청취자를 설정하거나 호출자를 위임자로 지정하십시오. – Leonardo

답변

0

당신의 popover는 다음과 같이 할 수 있습니다.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    // perform all the operations...ecc 
    [[(UIStoryboardPopoverSegue*)segue popoverController] setDelegate:self]; 
} 

그런 다음 호출자 컨트롤러에 모든 대리자 메소드가 있는지 확인해야합니다. NSNotification와

또는 :

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    // perform all the operations...ecc 
    [[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(changeBackground:) 
     name:BackgroundHasChangedNotification 
     object:[segue destinationViewController]]; 
} 

가 그런 다음의 dealloc에서 관찰자를 제거해야하고, 변경 배경 방법 :

-(void)changeBackground:(NSNotification*)notification { 

    NSDictionary *userInfo = notification.userInfo; 
    // I assume you are using background name 
    NSString *backgroundName = [userInfo objectForKey:BackgroundOneConstant]; 
    // do the rest.... 

} 
+0

이 문제를 해결할 방법을 찾았습니다 ... NSNotification을 사용하기 때문에 [self viewDidAppear : YES]를 추가했습니다. 통지 방법에. 이제 첫 번째 탭에서 작동합니다. 관계없이 도움 주셔서 감사합니다. –

+0

이 방법은이 특정 문제에 대해 작동하지 않지만 비슷한 문제에 대해 작동하는 것으로 나타났습니다. 감사. –