我正在使用Xcode 4.5並且定位iOS 5及更高版本。
我有一個彈出窗口,允許用戶更改底層視圖的背景。從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];
}
通知和委託是處理這個問題的正確方法。您必須確保popover調用者正在監聽該通知。我建議做一個BackgroundChange一個NSString常量。或者,確保popover控制器中的委託不爲零。 – Leonardo
我怎樣才能使通知一個NSString常量,爲什麼這將是必要的?調用者正在監聽...我在ViewDidLoad中有一個觀察者。它應該在別的地方,因爲視圖是在popover被調用之前加載的? –
像這樣做一個常量:NSString * const BackgroundChange = @「aBackgroundChange」;它會避免誤拼,最重要的是Xcode可以爲你自動完成。嘗試在創建彈出窗口後立即設置監聽器或將調用方分配爲委託。 – Leonardo