2009-02-20 159 views
1

我有一個視圖控制器我重複使用編輯以前的視圖控制器的TableView中的單個對象(NSString,NSNumber,NSDate)。我鬆散地基於Apple的SQLiteBooks示例項目中的EditingViewController。 datePicker在nib文件中被實例化。可能「重置」UIDatePicker突出顯示的月份/日期/年份?

這裏的問題是它工作正常&丹迪爲我設置它的第一個日期。但是,如果在第二個日期再次調用它,它將在加載時正確顯示我在其翻轉開關(?)中編輯的下一個日期,但是,突出顯示的(藍色)月,第&年是從第一次選擇器開始在第一次編輯之前顯示。如何將這些突出顯示的值設置爲第二個日期對象的初始值或重置整個UIdatePicker實例。

第二個相關問題(獎勵積分;-),因爲我很難圍繞可可:我爲什麼在SQLiteBooks示例中沒有@Property或@synthesize語句,用於在EditingVewController.h中聲明的datePicker?還是我忽略了這些顯而易見的?謝謝!

編輯:一些實驗用UIDatePickers其他應用程序之後,它似乎是出於某種原因在日期模式下使用將突出當前月份時的UIDatePicker,天&年,即使你從1776年說怎麼能編輯日期我們關閉了這種行爲?

回答

1

將第一個選取器的日期存儲在例如storedDate。然後使用其日期屬性將日期設置爲顯示在您的UIDatePicker中。假設你的UIDatePicker被命名爲選擇器,然後

picker.date = storedDate; // picker's date is initialised to today's date/time 

您還可以,如果你想選擇器動畫你的約會對象使用此方法:

[picker setDate:storedDate animated:YES]; 

至於性能,這是不正確的,他們應該僅用於公共數據。屬性是指通過方法訪問的數據,而不是通過實例變量直接訪問。屬性聲明(特別是@synthesize)告訴編譯器使用這些聲明根據需要自動生成訪問器方法,以滿足類的接口。

Objective-C中的點語法由編譯器翻譯爲對訪問器方法的調用。所以......

foo.bar = @"hello"; 

是由編譯器來編譯......

[foo setBar:@"hello"]; 

setBar,也產生了,將盡一切根據其@屬性聲明應。因此,如果它被宣佈爲保留,它將被正確保留在其setter中,而不必擔心它。

因此,總而言之,儘管您提到的Apple代碼可能正常工作(我沒有看過),但使用屬性的防禦性編碼會更好。

+0

如何重置您使用數字格式化的選取器?你如何讓它回到零? – Jason 2011-06-21 12:56:59

0

第二個相關的問題(積分;-)我掙扎環繞可可我的頭:爲什麼在SQLiteBooks例如有沒有在EditingVewController.h申報@property或在日期選擇@synthesize語句?還是我忽略了這些顯而易見的?謝謝!

如果您想公開屬性,則只需聲明@property。對於私有實例變量,您將其忽略。

而@synthesize只是有編譯器創建存取方法,爲您@property,所​​以如果它不是一個@財產,你不使用@synthesize(或@dynamic)。

相關問題