سوريفيلفيوكونترولر رفض لوحة المفاتيح على انتقاد

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

  •  21-12-2019
  •  | 
  •  

سؤال

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

لقد حاولت

UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];

-(void)dismissKeyboard
{
    [self.textField resignFirstResponder];
}

لكنه لا يعمل ، وأعتقد لأنني بالفعل باستخدام بانجيستوريكوغنيزر ل ريفالفيوكونترولر أي. [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];

أنا أيضا باستخدام UITapGestureRecognizer لكنه يعمل فقط من أجل النقر وليس للتمرير السريع.

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

المحلول

أعتقد أنك بحاجة إلى استخدام إحدى طرق التفويض في مندوب التطبيق ، لذا قد تكون هناك طرق تفويض ولكن عليك القيام بشيء مثل أدناه

لا تضيف أي إيماءات

استخدم هذا المندوب في appDelegate حذف جميع وحدات الماكرو يبدأ #if لا تحتاج ذلك

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

- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position
{
   // NSLog( @"%@: %@", NSStringFromSelector(_cmd), [self stringFromFrontViewPosition:position]);
   if(position == FrontViewPositionRight) //check the where to move 
   {
      UINavigationController *viewController = revealController.frontViewController;

     if([viewController.visibleViewController isKindOfClass:[FrontViewController class]])
       {
         [(FrontViewController *)viewController.visibleViewController dismissKeyboard]; //where this is the method declared in the FrontViewController.h file
      }

   }
}

هناك تحذير واحد لا يزال يعمل وضع نقطة فاصل والتحقق آمل أن يساعدك هذا ...

في FrontViewController.h

  -(void)dismissKeyboard; //add this 

في ال FrontViewController.m

 -(void)dismissKeyboard
 {
      if([self.textField isFirstResponder]) //check
         [self.textField resignFirstResponder];
 }

نصائح أخرى

كان لي نفس المشكلة.

أضفت self.revealController.delegate = self; إلى وحدة تحكم وجهة نظري التي استخدمتها كعرض أمامي.وطريقة تفويض الحصول على استدعاء.

اعتدت - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{} طريقة المندوب وكتبت [textField endEditing:YES]; في هذا الأسلوب مندوب.

وأضاف أيضا <SWRevealViewControllerDelegate> إلى بلدي فيوكونترولر.ح وهو وجهة نظري الأمامية.

جرب هذا:

يرجى إضافة الرمز أدناه في سوريفيلفيوكونتولر.م في الطريقة - (منطقي) _بانغستوريجب أن تبدأ

[الذات.عرض التحرير النهائي: نعم];

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

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"reveal-icon.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(myMethod)];

self.navigationItem.leftBarButtonItem = barBtn;

ومن في طريقتك:

-(void)myMethod{
[self.view endEditing:YES];
SWRevealViewController *reveal = self.revealViewController;
[reveal revealToggleAnimated:YES];
}

وسوف تعمل بالتأكيد.

جرب هذا

[[[self revealViewController] view] endEditing:YES]

أضف هذا في

- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position 

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

تحقق الموقف الحالي من فرونتفيو وكتابة رمز إخفاء لوحة المفاتيح في حالة الشرط.

هل أنت متأكد من أن self.textField هو المستجيب الأول الحالي?إذا كنت تحاول الاستقالة المستجيب الأول في UIGestureRecognizer طريقة المندوب – gestureRecognizerShouldBegin:

من الواضح العودة نعم في هذه الوظيفة.

قم بتحرير الطريقة أدناه في

<url>.m

(IBAction)revealToggle:(id)sender {
    [self.view endEditing:YES];
    [self revealToggleAnimated:YES]; 
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top