1

Xcode 4.5を使用しており、iOS5以降をターゲットにしています。
ユーザーが基になるビューの背景を変更できるポップオーバーがあります。

「ボタン」をタップするときは、2回タップして変化を確認する必要があります。
私はを使用して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];
}
4

1 に答える 1

0

ストーリーボードを使用していて、ポップオーバーがセグエである場合は、次のようにできます。

-(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....

}
于 2012-11-06T20:01:48.140 に答える