سؤال

أريد عدم السماح بإدخال حرفا جديدا في NSTEXTFILD الخاص بي، أي افتراضيا ممكن عن طريق كتابة الخيار - أدخل (أو عودة الخيار).

بينما وجدت بعض الصفحات شرح كيف السماح فواصل الأسطر بدون الاضطرار إلى استخدام تعديل الخيار، لم أجد أي شيء تعطيل خط فواصل تماما.

كيف يمكن القيام بذلك؟

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

المحلول

يمكنك إنشاء فرعية من NSFormatter وتنفيذ ISPartialStringValid: ... طريقة لمنع Newline.

- (BOOL)isPartialStringValid:(NSString **)partialStringPtr 
       proposedSelectedRange:(NSRangePointer)proposedSelRangePtr 
              originalString:(NSString *)origString 
       originalSelectedRange:(NSRange)origSelRange 
            errorDescription:(NSString **)error
{
    // the user may have:
    // -- deleted the left most character
    // -- deleted the last character and we have an empty string
    // both cases are valid
    if (proposedSelRangePtr->location == 0)
        return YES;

    unichar theChar = [*partialStringPtr characterAtIndex:proposedSelRangePtr->location - 1];

    if ([[NSCharacterSet newlineCharacterSet] characterIsMember:theChar]) {
        *error = nil;
        NSBeep();
        return NO;
    }

    return YES;
}

نصائح أخرى

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top