এখানে যেমন বলা হয়েছে: ইউআইটিেক্সটফিল্ড পাঠ্য পরিবর্তনের ইভেন্ট হিসাবে মনে হচ্ছে আইওএস ((আইওএস .0.০ এবং checked.১ পরীক্ষা করা হয়েছে) UITextField
কেবলমাত্র পর্যবেক্ষণ করে বস্তুর পরিবর্তনগুলি পুরোপুরি সনাক্ত করা সম্ভব নয়UITextFieldTextDidChangeNotification
।
দেখে মনে হচ্ছে যে বিল্ট-ইন আইওএস কীবোর্ড দ্বারা সরাসরি করা পরিবর্তনগুলি এখনই ট্র্যাক করা হয়েছে। এর অর্থ হ'ল আপনি যদি UITextField
কেবলমাত্র এরকম কিছু শুরু করে নিজের অবজেক্টটি পরিবর্তন করেন : myUITextField.text = @"any_text"
আপনাকে কোনও পরিবর্তন সম্পর্কে অবহিত করা হবে না।
আমি জানি না এটি কোনও ত্রুটিযুক্ত বা এটি উদ্দেশ্যযুক্ত কিনা। আমি কোনও ডকুমেন্টেশনে কোনও যুক্তিসঙ্গত ব্যাখ্যা না পাওয়ায় বাগের মতো মনে হচ্ছে। এটি এখানেও বলা হয়েছে: ইউআইটিেক্সটফিল্ড পাঠ্য পরিবর্তন ইভেন্ট ।
আমার এটির "সমাধান" হ'ল আমার নিজের প্রতিটি পরিবর্তনের জন্য নিজের দ্বারা একটি বিজ্ঞপ্তি পোস্ট করা UITextField
(যদি অন্তর্নিহিত আইওএস কীবোর্ডটি ব্যবহার না করে যদি সেই পরিবর্তনটি করা হয়)। এটার মতো কিছু:
myUITextField.text = @"I'm_updating_my_UITextField_directly_in_code";
NSNotification *myTextFieldUpdateNotification =
[NSNotification notificationWithName:UITextFieldTextDidChangeNotification
object:myUITextField];
[NSNotificationCenter.defaultCenter
postNotification:myTextFieldUpdateNotification];
এইভাবে আপনি 100% আত্মবিশ্বাসী যে আপনি যখন নিজের .text
সম্পত্তি পরিবর্তন করবেন তখন আপনি একই বিজ্ঞপ্তিটি পাবেনUITextField
যখন আপনার কোডটিতে "ম্যানুয়ালি" আপডেট করেন বা বিল্ট-ইন আইওএস কীবোর্ডের মাধ্যমে আপনি বস্তুর ।
এটি বিবেচনা করা জরুরী যেহেতু এটি কোনও নথিভুক্ত আচরণ নয়, এই পদ্ধতির ফলে আপনার UITextField
অবজেক্টে একই পরিবর্তনের জন্য 2 টি বিজ্ঞপ্তি পেতে পারে । আপনার প্রয়োজনগুলির উপর নির্ভর করে (আপনি যখন UITextField.text
পরিবর্তনগুলি আসলে কী করেন ) এটি আপনার অসুবিধা হতে পারে।
কিছুটা ভিন্ন দৃষ্টিভঙ্গি হ'ল একটি কাস্টম বিজ্ঞপ্তি পোস্ট করা (এটি হ'ল ব্যতীত একটি কাস্টম নামের সাথে UITextFieldTextDidChangeNotification
) যদি আপনার সত্যিকারের বিজ্ঞপ্তিটি আপনার বা "আইওএস-তৈরি" ছিল কিনা তা জানতে হবে।
সম্পাদনা করুন:
আমি সবেমাত্র একটি ভিন্ন পদ্ধতির সন্ধান করেছি যা আমি মনে করি এটি আরও ভাল হতে পারে:
এর মধ্যে উদ্দেশ্য-সি এর মূল-মান পর্যবেক্ষণ (কেভিও) বৈশিষ্ট্য অন্তর্ভুক্ত রয়েছে ( http://developer.apple.com/library/ios/#docamentation/cocoa/conceptual/KeyValueObserving/KeyValueOserving.html#//apple_ref/doc/uid / 10000177-বিসিআইকিজেডিএএ )।
মূলত, আপনি কোনও সম্পত্তির পর্যবেক্ষক হিসাবে নিজেকে নিবন্ধিত করুন এবং যদি এই সম্পত্তিটি পরিবর্তন হয় তবে আপনাকে সে সম্পর্কে অবহিত করা হবে। "নীতি "টি কীভাবে NSNotificationCenter
কাজ করে তার সাথে বেশ মিল , এই আইওএস 6 এর মতো স্বয়ংক্রিয়ভাবে কাজ করার প্রধান সুবিধা হ'ল (ম্যানুয়ালি বিজ্ঞপ্তি পোস্ট করার মতো কোনও বিশেষ ঝাঁকুনি ছাড়াই)।
আমাদের-পরিস্থিতিটির জন্য UITextField
এটি ঠিক কাজ করে যদি আপনি এই কোডটি যুক্ত করেন, উদাহরণস্বরূপ, UIViewController
এতে আপনার পাঠ্য ক্ষেত্র রয়েছে:
static void *myContext = &myContext;
- (void)viewDidLoad {
[super viewDidLoad];
//Observing changes to myUITextField.text:
[myUITextField addObserver:self forKeyPath:@"text"
options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld
context:myContext];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context {
if(context == myContext) {
//Here you get notified every time myUITextField's "text" property is updated
NSLog(@"New value: %@ - Old value: %@",
[change objectForKey:NSKeyValueChangeNewKey],
[change objectForKey:NSKeyValueChangeOldKey]);
}
else
[super observeValueForKeyPath:keyPath ofObject:object
change:change context:context];
}
"প্রসঙ্গ" পরিচালনা সম্পর্কিত এই উত্তরের কৃতিত্ব: https://stackoverflow.com/a/12097161/2078512
নোট: মত যখন তুমি মনে প্রক্রিয়ায় একটি সম্পাদনা UITextField
টাইপ / সরিয়ে বিল্ট-ইন আইওএস কীবোর্ড, টেক্সট ক্ষেত্রের 'টেক্সট' সম্পত্তি প্রতিটি নতুন অক্ষর দিয়ে আপডেট করা হয় না। পরিবর্তে, আপনি পাঠ্য ক্ষেত্রের প্রথম প্রতিক্রিয়াশীল স্থিতির পদত্যাগ করার পরে পাঠ্য ক্ষেত্রের অবজেক্টটি "সামগ্রিকভাবে" আপডেট হয়।