سؤال

على تطبيق iPhone، لدي لوحة مفاتيح مخصصة تعمل مثل لوحة المفاتيح القياسية؛ يبدو أنه إذا أصبح TextField مخصص يستجيب أولا ويختبئ إذا قام الحقل باستمرار المستجيب الأول. أنا أيضا نشر عام UIKeyboardWillShowNotification, UIKeyboardDidShowNotification ونظرائهم المختبئين، مثل يلي:

NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithCapacity:5];
[userInfo setObject:[NSValue valueWithCGPoint:self.center]
             forKey:UIKeyboardCenterBeginUserInfoKey];
[userInfo setObject:[NSValue valueWithCGPoint:shownCenter]
             forKey:UIKeyboardCenterEndUserInfoKey];
[userInfo setObject:[NSValue valueWithCGRect:self.bounds]
             forKey:UIKeyboardBoundsUserInfoKey];
[userInfo setObject:[NSNumber numberWithInt:UIViewAnimationCurveEaseOut]
             forKey:UIKeyboardAnimationCurveUserInfoKey];
[userInfo setObject:[NSNumber numberWithDouble:thisAnimDuration]
             forKey:UIKeyboardAnimationDurationUserInfoKey];

[[NSNotificationCenter defaultCenter] postNotificationName:UIKeyboardWillShowNotification
                                                    object:nil
                                                  userInfo:userInfo];

هذا الرمز يعمل وأستعبه في UIViewController الفئات الفرعية.

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

هل لدى أي شخص فكرة لماذا قد يكون هذا هو الحال؟ هل قام أي شخص بتنفيذ شيء مماثل بنجاح؟

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

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

المحلول

حسنا، هناك عدد قليل من الاحتمالات التي تدخر فيها. من الوصف الخاص بك، يبدو أن ApableView لا يستخدم إشعارات Uikeyboard.

ولكن ربما، هذا هو UINAVICTONTroller الذي يستجيب لهذا الإشعار (أو UITABBARCONTROLLER).

يمكنك تجاوز طرق مثل SetFrame: DrawRect: setneedsdisplay في تطبيق الجدول لمعرفة ما يحدث في مكدس المكالمات. قد تكون قادرا على معرفة ما الذي يسبب في الواقع جدول الجدول في الحجم الصحيح.

ولكن في جميع الاحتمالات، فقط تغيير حجم الطاولين لنفسك هو الحل الأسهل بكثير. هذه الاقتراحات هي فقط للمتعة!

نصائح أخرى

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

في ViewDidLoad الخاص بك:

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(keyboardWillShow:) 
                                             name: UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(keyboardDidShowOrHide:) 
                                             name: UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(keyboardWillHide:) 
                                             name: UIKeyboardWillHidewNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(keyboardDidShowOrHide:) 
                                             name: UIKeyboardDidHideNotification object:nil];

وفي عرض وحدة تحكم:

-(void) keyboardWillShow:(id)sender {
  [UIView beginAnimations];
  [UIView setAnimationDuration:0.3];
  self.view.frame = //Your new size
}

-(void) keyboardDidShowOrHide:(id)sender {
  [UIView commitAnimations];
}

-(void) keyboardWillHide:(id)sender {
  [UIView beginAnimations];
  [UIView setAnimationDuration:0.3];
  self.view.frame = //Your old size
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top