2012-08-08 12 views
32

में परिवर्तन को देखते हुए मैंने देखा कि UIDatePicker में परिवर्तनों का निरीक्षण करने के लिए कोई प्रतिनिधि नहीं है। क्या यह पता लगाने का कोई तरीका है कि पिकर में कुछ भी पुष्टि किए बिना परिवर्तन किया जाता है, जैसे कि यह एक नई संख्या पर फैलता है और जमीन पर निर्भर करता है, मैं इसे पहचानने में सक्षम होना चाहता हूं। मैं कुंजी मान अवलोकन के बारे में सोचा है, लेकिन मैं वहाँ एक संपत्ति है कि मौकेUIDatePicker

उत्तर

38

आईबी पर जाएं और UIDatePicker से अपनी .h फ़ाइल में खींचें। फिर enter image description here

इसे प्रबंधित करें हालांकि आप अपनी .m फ़ाइल में चाहते हैं; एक्सकोड आपके लिए नीचे दी गई विधि जोड़ देगा।

enter image description here

+0

बेशक इसका सबसे आसान समाधान मैंने भी विचार नहीं किया। धन्यवाद दोस्त – Chris

55

आप तारीख परिवर्तनों को संभाल करने के लिए अपने UIDatePicker को UIControlEventValueChanged घटना जोड़ने की जरूरत पर परिवर्तन है नहीं लगता है: तो फिर कार्यान्वयन

[myDatePicker addTarget:self action:@selector(dateIsChanged:) forControlEvents:UIControlEventValueChanged]; 

:

- (void)dateIsChanged:(id)sender{ 
    NSLog(@"Date changed"); 
} 
+1

अच्छा जवाब है, मैं इस कार्यक्रम संबंधी सामान के लिए बहुत आलसी हूँ। ध्यान दें कि आपको ऐसा करने के लिए दिनांक पिकर के संदर्भ की आवश्यकता होगी, जो कि यदि आपने इसे आईबी में बनाया है तो आपको जरूरी नहीं होगा (हालांकि आप इसे आसानी से जोड़ सकते हैं)। – Dustin

+1

स्विफ्ट संस्करण: 'picker.addTarget (आत्म, कार्रवाई: #selector (dateChanged), forControlEvents: .ValueChanged) @objc dateChanged (इस: UIDatePicker) समारोह { प्रिंट (sender.date.description) }' –

2

यहाँ एक KVO अनुरूप दिनांक पिकर के लिए एक प्रस्ताव है:

@interface LNKVODatePicker : UIDatePicker 

@end 

@implementation LNKVODatePicker 

- (void)willMoveToWindow:(UIWindow *)newWindow 
{ 
    [super willMoveToWindow:newWindow]; 

    [self removeTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 

    if(newWindow != nil) 
    { 
     [self addTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 
    } 
} 

- (void)dealloc 
{ 
    [self removeTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 
} 

- (void)_didChangeDate 
{ 
    [self willChangeValueForKey:@"date"]; 
    [self didChangeValueForKey:@"date"]; 
} 

@end 
संबंधित मुद्दे