سؤال

ولقد حصلت على UITextField، وعندما يحصل على النص الذي تم إدخاله إلى ذلك، أريد الحصول على doubleValue من حقل النص وأداء بعض الحسابات وعرضها في UITableView.

ومندوب لUITextField يعتمد بروتوكول UITextFieldDelegate، وتنفذ على حد سواء textFieldShouldReturn: وtextFieldDidEndEditing: طرق. textFieldShouldReturn: استقالة الوضع المستجيب الأول الذي، وفقا لمستندات وينبغي أيضا أن يؤدي textFieldDidEndEditing :، ولكن أنا لا أرى textFieldDidEndEditing: دعا

- (BOOL)textFieldShouldReturn:(UITextField*)theTextField {
    if (theTextField == thresholdValue) {
        [thresholdValue resignFirstResponder];
    }
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [self updateThresholdValue:textField];
}

قد يكون من المفيد الإشارة إلى أن حاولت أيضا ربط بعض الأحداث حيز النص إلى مندوب وجود updateThresholdValue دعوة الحدث: مباشرة، ولكن هذا لا تعمل إما

هل كانت مفيدة؟

المحلول 3

وكما ذكر في أحد التعليقات، حاولت تكرار صيغة أبسط ما كنت أحاول القيام به باستخدام التطبيق HelloWorld، وعملت في المحاولة الأولى، مع أية مشاكل، فقط كما هو متوقع. وفي مواجهة ذلك، بدأت أتساءل قليلا.

وفي مكان ما في كل غوغلينغ فعلت في محاولة للحصول على إجابة لهذه المشكلة، وعدوت عبر وصلة حيث كان شخص وجود مشكلة مع الأحداث لا يطلقون النار من على زر، وتبين أن والمشكلة متعلقة وجهة النظر التي وضعت على زر وهذا الرأي وجود subview آخر على أنه الند لزر، والتي subview كان يأكل بطريقة أو بأخرى الأحداث بدلا من السماح لهم لنذهب الى حيث كانوا جهت. كان السيناريو ليس بالضبط نفس الألغام، لكنه بدا قريبة بما فيه الكفاية من شأنه أن التحقيق يكون من المجدي. وعلى الرغم من كل النصائح ممتازة تلقت هنا، قد لا تثمر بعد.

والليلة الماضية قررت الانتهاء من إعادة إنشاء ملف بنك الاستثمار القومي من الصفر (صنع نسخة من ما كان لي أولا)، وحصلت على عمل. الفرق الرئيسي يبدو أن ذلك، كنت قد الزج بي في ملف بنك الاستثمار القومي غير العاملين الأصلي على TableViewController من لوحة، ثم تغير نوعه لبلدي PZTableViewController فرعية. عندما فعلت نفس الشيء في بلدي بنك الاستثمار القومي الجديد، إلا أن الأحداث لم يبدأ. إذا، من ناحية أخرى، أزلت TableViewController الإفراط في جره وبدلا من سحب ما يزيد قليلا عن NSObject وغيرت فئتها لPZTableViewController وهوى كل شيء، كل شيء "مجرد عمل".

وسأحاول لملاحقة الرابط الذي حصلت لي بدأت على هذا الخط من التفكير وبعد ذلك إما لتحرير أو تعليق.

وهذا هو أيضا ليست إجابة كاملة لأنني لا أفهم حتى الآن الفرق بين TableViewController من-لوحة وبلدي فرعية. عندما كنت هذا الرقم، وسوف أقوم بتحديث هذه الإجابة عبر تعديل أو تعليق.

نصائح أخرى

وفقط واجهت المشكلة نفسها التي وصفها. بعد محاولة كل ما كنت أفكر فيه وأضفت هذه الطريقة المفوض:

// if we encounter a newline character return
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{   
    // enter closes the keyboard
    if ([string isEqualToString:@"\n"])
    {
        [textField resignFirstResponder];
        return NO;
    }
    return YES;
}

والآن الحرائق textFieldShouldEndEditing وحقل نص استقالة المستجيب الأول.

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

وأطلقت textFieldDidEndEditing عندما استقال حيز النص انها اول حالة المستجيب في حين أطلقت textFieldShouldReturn عند الضغط على زر العودة.

وو<م> يبدو مثل حيز النص الخاص بك أبدا في الاستقالة كما firstResponder. يمكنك التحقق من ذلك بسهولة جدا عن طريق وضع بعض إخراج التصحيح (كما اقترح في تعليق) ومجرد التنقل من حيز النص مع لمسة - على سبيل المثال البدء في الكتابة ثم المس خارج للتو من الميدان لاجبارها على الاستقالة firstResponder

ولست متأكدا إذا كان ذلك يساعد كثيرا، ولكن هذا يبدو وكأنه حالة غريبة كنت ضرب.

وانتهى بي الأمر الأسلاك حتى editingChanged لتسجيل كل تغيير واحد إلى حقل النص بدلا من معرفة كيفية تغطية جميع الحالات الزاوية مع الاسترجاعات المتبقية.

وجدا "كفاءة" بسبب "سهولة الاستخدام" الروبوت يشبه من textFieldDidEndEditing (السخرية).

إذا اعتمدت <م> UITextFieldDelegate البروتوكول في وحدة التحكم وجهة نظركم، ثم كتابة السطر التالي من التعليمات البرمجية في viewDidLoad طريقة لتفعيل أساليب البروتوكول أعلاه إلى الحقول النصية المقابلة الخاصة بك:

override func viewDidLoad() {
    //other stuff
    yourTextField.delegate = self
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top