এই থ্রেডের জনপ্রিয় একটি উত্তর নিম্নলিখিত কোড ব্যবহার করে:
func keyboardWillShow(sender: NSNotification) {
self.view.frame.origin.y -= 150
}
func keyboardWillHide(sender: NSNotification) {
self.view.frame.origin.y += 150
}
স্থির পরিমাণে আপনার ভিউ অফসেট করার ক্ষেত্রে একটি সুস্পষ্ট সমস্যা আছে। এটি একটি ডিভাইসে দেখতে সুন্দর লাগবে তবে অন্য আকারের কনফিগারেশনে খারাপ লাগবে। আপনার কিবোর্ডের উচ্চতা পেতে হবে এবং এটি আপনার অফসেট মান হিসাবে ব্যবহার করতে হবে।
এখানে এমন একটি সমাধান রয়েছে যা সমস্ত ডিভাইসে কাজ করে এবং প্রান্ত-কেস পরিচালনা করে যেখানে ব্যবহারকারী টাইপ করার সময় ভবিষ্যদ্বাণীপূর্ণ পাঠ্য ক্ষেত্রটি লুকিয়ে রাখেন।
সমাধান
নীচে লক্ষণীয় গুরুত্বপূর্ণ, আমরা আমাদের অবজেক্টের প্যারামিটার হিসাবে সেলফ.ভিউ.উইনডো দিয়ে যাচ্ছি। এটি আমাদের কীবোর্ড থেকে ডেটা সরবরাহ করবে যেমন এর উচ্চতা!
@IBOutlet weak var messageField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: self.view.window)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: self.view.window)
}
func keyboardWillHide(sender: NSNotification) {
let userInfo: [NSObject : AnyObject] = sender.userInfo!
let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size
self.view.frame.origin.y += keyboardSize.height
}
আমরা এটি সমস্ত ডিভাইসে সুন্দর দেখাব এবং ব্যবহারকারী ভবিষ্যদ্বাণীপূর্ণ পাঠ্য ক্ষেত্রটি যুক্ত বা সরিয়ে ফেলবে এমন কেস পরিচালনা করব।
func keyboardWillShow(sender: NSNotification) {
let userInfo: [NSObject : AnyObject] = sender.userInfo!
let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size
let offset: CGSize = userInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue.size
if keyboardSize.height == offset.height {
UIView.animateWithDuration(0.1, animations: { () -> Void in
self.view.frame.origin.y -= keyboardSize.height
})
} else {
UIView.animateWithDuration(0.1, animations: { () -> Void in
self.view.frame.origin.y += keyboardSize.height - offset.height
})
}
}
পর্যবেক্ষকদের সরান
অপ্রয়োজনীয় বার্তাগুলি সঞ্চারিত হতে বাধা দিতে আপনার ভিউটি ত্যাগ করার আগে আপনার পর্যবেক্ষকদের অপসারণ করতে ভুলবেন না।
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: self.view.window)
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: self.view.window)
}
মন্তব্যসমূহের প্রশ্নের ভিত্তিতে আপডেট করুন:
আপনার যদি দুটি বা ততোধিক পাঠ্য ক্ষেত্র থাকে, তবে আপনার ভিউ.ফ্রেম.রিগিন.ইউ শূন্য রয়েছে কিনা তা পরীক্ষা করে দেখতে পারেন।
func keyboardWillShow(sender: NSNotification) {
let userInfo: [NSObject : AnyObject] = sender.userInfo!
let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size
let offset: CGSize = userInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue.size
if keyboardSize.height == offset.height {
if self.view.frame.origin.y == 0 {
UIView.animateWithDuration(0.1, animations: { () -> Void in
self.view.frame.origin.y -= keyboardSize.height
})
}
} else {
UIView.animateWithDuration(0.1, animations: { () -> Void in
self.view.frame.origin.y += keyboardSize.height - offset.height
})
}
print(self.view.frame.origin.y)
}