คำถามที่มีการโต้ตอบ PopGestureRecognizer เมื่อแสดงแป้นพิมพ์

นี่คือภาพหน้าจอ

ในมุมมอง B เมื่อแป้นพิมพ์แสดงขึ้นและป๊อป viewController เพื่อดู A พร้อมด้วย PopGestureRecognizer แบบโต้ตอบ แป้นพิมพ์จะยังคงอยู่ที่นี่ :(

จะให้คีย์บอร์ดเคลื่อนที่ด้วย view B ได้อย่างไร? (เช่น iMessage หรือ Facebook Messenger)

PS: ฉันพยายามรับมุมมองแป้นพิมพ์และเพิ่มใน self.view มันมีประโยชน์ แต่ฉันคิดว่ามันไม่ใช่วิธีที่ดี

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardDidShown)
                                             name:UIKeyboardDidShowNotification object:nil];

และ

- (void)keyboardDidShown
{
    UIView * keyboardView = self.textView.inputAccessoryView.superview;
    [self.view addSubview: keyboardView];
}

person kamikuo    schedule 03.12.2013    source แหล่งที่มา


คำตอบ (2)


ลองใช้วิธีแก้ปัญหานี้:

https://github.com/cotap/TAPKeyboardPop

นี่คือหมวดหมู่น้ำหนักเบาที่ฟัง interactivePopGestureRecognizer ท่าทางและแป้นพิมพ์เคลื่อนไหวตามลำดับ

person m8labs    schedule 06.06.2014

คุณไม่ได้เพิ่ม keybordView ให้กับมุมมอง หากคุณต้องการแสดงแป้นพิมพ์สำหรับ UITextField/UITextView ของคุณ คุณจะเรียกกลายเป็น firstResponder บนวัตถุนั้น ในตัวอย่างของคุณควรจะเป็น:

[self.textView becomeFirstResponder];

หากคุณต้องการซ่อนแป้นพิมพ์ ให้โทร:

[self.textView  resignFirstResponder];

และหากคุณต้องการซ่อนคีย์บอร์ดก่อนที่จะยกเลิก ViewA คุณควรเรียกมันที่จุดเริ่มต้นของ PopGestureRecognizer แบบโต้ตอบของคุณเมื่อคุณเริ่มแอนิเมชั่นเพื่อแสดง ViewB หวังว่ามันจะช่วยได้

// ขยาย

ฉันไม่รู้ว่าทำไมคุณถึงพยายามเพิ่ม AccessoryView เป็นมุมมองย่อยในมุมมองของคุณ

- (void)keyboardDidShown
{
    UIView * keyboardView = self.textView.inputAccessoryView.superview;
    [self.view addSubview: keyboardView];
}

และฉันไม่เข้าใจว่าทำไมคุณถึงใช้ศูนย์การแจ้งเตือน ฟังก์ชันการทำงานที่แป้นพิมพ์ยังคงอยู่เมื่อคุณปิดมุมมอง (ในฐานะแอป iMessage) เป็นฟังก์ชันมาตรฐาน เพียงแค่ใช้

[self.textView becomeFirstResponder];

เมื่อคุณต้องการโชว์คีย์บอร์ดแล้วไม่โทร

[self.textView  resignFirstResponder];

เมื่อคุณเปิดตัวควบคุมมุมมองของคุณ iOS ทำงานแทนคุณ

person Greg    schedule 03.12.2013
comment
ขออภัยบางทีผมอาจถ่ายทอดไม่ชัดเจน ฉันรู้วิธีแสดง / ซ่อนแป้นพิมพ์และหลังจากการทดสอบฉันพบว่ามันจะส่ง UIKeyboardWillHideNotification โดยอัตโนมัติเมื่อ ViewA ปรากฏขึ้นที่ ViewB แต่แป้นพิมพ์ไม่ได้ซ่อน - person kamikuo; 03.12.2013
comment
ฉันคิดว่าสิ่งนี้สามารถเกิดขึ้นได้เนื่องจากคุณเพิ่ม keyboardView เป็นมุมมองย่อยในมุมมองของคุณ ลองแทนที่ด้วย [self.textView beFirstResponder]; - person Greg; 03.12.2013
comment
ไม่ เพิ่ม keyboardView ให้กับ self.view เป็นการลอง ไม่ใช่เหตุผล - person kamikuo; 03.12.2013
comment
หลังจากที่แป้นพิมพ์แสดงและ textField/textView มี inputAccessoryView แล้ว textView.inputAccessoryView.superview จะเป็น keyboardView ดังนั้นให้เพิ่มลงในมุมมองของฉัน - person kamikuo; 03.12.2013
comment
ขอบคุณสำหรับความอดทนของคุณ :) ฉันจับภาพหน้าจอไว้ หวังว่ามันจะตอบคำถามของฉันได้ lh4.googleusercontent.com/-vpAzSRkfy9A/Up3LBG1ICYI/AAAAAAAALM/ - person kamikuo; 03.12.2013
comment
โอเค ฉันมีประเด็นของคุณแล้ว ฉันขอถามได้ไหมว่าทำไมคุณถึงพยายามทำเช่นนี้ ในแป้นพิมพ์ ViewB ของคุณเชื่อมต่อกับช่องข้อความ แต่ถ้าคุณย้ายไปที่ ViewA แป้นพิมพ์จะไม่มีประโยชน์ - person Greg; 03.12.2013
comment
โอ้! ฉันไม่ต้องการที่จะทำเช่นนั้น ฉันหวังว่าฉันจะสามารถทำเช่นเดียวกันกับ iMessage ได้ แต่ฉันทำไม่ได้ ฉันมักจะได้รับผลลัพธ์จากการถ่ายภาพหน้าจอที่ถูกต้องเสมอ - person kamikuo; 03.12.2013
comment
แทนที่จะเพิ่ม keyboardView ให้กับ self.view ให้ลองเพิ่มเข้าไปใน superview - person Greg; 03.12.2013