كيفية تعطيل زر "تم" من شريط Nav عندما تنزلق لوحة المفاتيح؟

StackOverflow https://stackoverflow.com/questions/4136027

سؤال

أعتقد أنني لا أستطيع تعطيله لأنني لا أستطيع الوصول إلى ذلك UIBarButttonItem برمجيا
(مع إما ViewWithTag أو rightBarButtonItem).

أي اقتراحات (قصيرة من إضافة الواجهة بدون IB)؟
كاختبار ، حاولت أيضًا إضافة زر برمجيًا (على يسار شريط NAV) ، لكنه لم يتم عرضه في شريط NAV.

الكود ذي الصلة (في MyEditorViewControler.m):

    - (void)textFieldDidBeginEditing:(UITextField *)sender { //successfully executes when keyboard slides in

        UINavigationItem *item = self.navigationItem; //item  = 0x6420e0  OK.  (value at debugger breakpoints)
        UIBarButtonItem *doneButton4    = (UIBarButtonItem *) [self.view viewWithTag:44]; //doneButton4 = 0x0,  not OK.
        doneButton4.enabled = NO; 
    }
    - (void)textFieldDidEndEditing:(UITextField *)sender {  //successfully executes when keyboard  slides out.  
        ...
        UIButton* doneButton = (UIButton *)[self.view viewWithTag:44]; //Attempt to re-enable button.
        doneButton.enabled = YES;
    }
    - (void)viewDidLoad {   //Attempt to programmatically add a *left* button to the nav bar. Result: Button does not display in nav bar.
        .... 
        UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
        self.navigationItem.leftBarButtonItem = leftBarButtonItem;
        [leftBarButtonItem release];
    }

تفاصيل
أعتقد أن هذه حالة شائعة لأن الزر المنجز:
أ) UIBarButttonItem تمت إضافة من مكتبة IB إلى شريط التنقل الموجود في عرض التمرير يحتوي على بعض UITextField's.
ب) يتصرف كما هو متوقع (لحفظ البيانات التي يديرها المستخدم وما إلى ذلك) ،
باستثناء عدم التعطيل عندما تظهر لوحة المفاتيح.
ج) IB> المفتش> سمات عنصر زر الشريط:
المعرف = تم
علامة = 44
فئة = UIBarButtonItem

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

المحلول

يمكنك الاستماع إلى إشعار (UIKeyboardWillShowNotification) تم نشرها عندما تنزلق لوحة المفاتيح في:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

ثم تنفيذ -keyboardWillShow:.

-(void)keyboardWillShow {
    UIButton *button = self.navigationItem.leftBarButtonItem;
    button.enabled = NO;
}

لإعادة تمكين الزر مرة أخرى ، افعل الشيء نفسه من أجل UIKeyboardDidHideNotification

نصائح أخرى

يجب أن تستخدم فقط

UIBarButtonItem *doneButton = self.navigationItem.leftBarButtonItem; 
doneButton.enabled = YES;

//Both of these should work, you shouldn't need any type of IBOutlets for this

UINavigationItem *item = self.navigationItem;
UIBarButtonItem *doneButton = item.leftBarButtonItem;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top