কী-বোর্ডের উচ্চতা কীভাবে পাবেন?


109

পরিবর্তিত আইওএস ডিভাইসের একটি কীবোর্ডের উচ্চতা আলাদা। কেউ কি জানেন যে আমি কীভাবে প্রোগ্রামের মাধ্যমে কোনও ডিভাইসের কীবোর্ডের উচ্চতা পেতে পারি?


1
সম্ভাব্য সদৃশ stackoverflow.com/questions/11284321/...
Kendel

উত্তর:


217

সুইফটে:

আপনি UIKeyboardWillShowNotificationবিজ্ঞপ্তিটি সাবস্ক্রাইব করে কীবোর্ডের উচ্চতা পেতে পারেন । (ধরে নিচ্ছি আপনি এটি দেখানোর আগে উচ্চতাটি কী হবে তা জানতে চান)।

এটার মতো কিছু:

সুইফট 2

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)

সুইফট 3

NotificationCenter.default.addObserver(
    self,
    selector: #selector(keyboardWillShow),
    name: NSNotification.Name.UIKeyboardWillShow,
    object: nil
)

সুইফট 4

NotificationCenter.default.addObserver(
    self,
    selector: #selector(keyboardWillShow),
    name: UIResponder.keyboardWillShowNotification,
    object: nil
)

তারপরে আপনি keyboardWillShowএগুলির মতো ফাংশনে উচ্চতা অ্যাক্সেস করতে পারবেন :

সুইফট 2

func keyboardWillShow(notification: NSNotification) {
    let userInfo: NSDictionary = notification.userInfo!
    let keyboardFrame: NSValue = userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue
    let keyboardRectangle = keyboardFrame.CGRectValue()
    let keyboardHeight = keyboardRectangle.height
}

সুইফট 3

@objc func keyboardWillShow(_ notification: Notification) {
    if let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue {
        let keyboardRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keyboardRectangle.height
    }
}

সুইফট 4

@objc func keyboardWillShow(_ notification: Notification) {
    if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
        let keyboardRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keyboardRectangle.height
    }
}

আমি বুঝতে পারি না যে এখানে লোকটি কেন ভাবেন- ইন- g.net/ghawk/blog/2012/09/… পোর্ট্রেট অনুসন্ধান করে। কীবোর্ডের আয়তক্ষেত্রটি? সমস্ত দিকনির্দেশে এখনও সঠিক হবে না?
আন্তন ট্রপ্যাশকো

5
হ্যাঁ, দ্রুতগতিতে 3 এটি গোলমেলে। প্রতিবার আলাদা মান দেওয়া
মহেশ

NotificationsCenter.default.addObserver (স্ব, নির্বাচক: # নির্বাচক (কীবোর্ড উইলশো), নাম: .UIKeyboardWillShow, অবজেক্ট: শূন্য) সঠিক বাক্য গঠন
shinyuX

আপনার যদি ইতিমধ্যে কীবোর্ড দৃশ্যমান থাকে এবং আপনি ডিভাইসটি ঘোরান, তবে কীভাবে নতুন কীবোর্ডের উচ্চতা পাবেন?
খুরি

1
UIResponder.keyboardWillShowNotification
সুইট

63

সুইফট 3.0 এবং সুইফট 4.1

1- viewWillAppearপদ্ধতিতে বিজ্ঞপ্তিটি নিবন্ধ করুন :

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)

2- কল করার পদ্ধতি:

@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        let keyboardHeight = keyboardSize.height
        print(keyboardHeight)
    }
}

3
এটি কাজ করে, আরও বেশি সুইফট ৩.০ অনুবর্তী করতে আপনার keyboardWillShowপ্যারামিটারও টাইপ Notificationহতে পারে।
bfich

1
আমরা যখন ফাংশন কীবোর্ডওয়িলশো () বলি তখন আমরা যুক্তি হিসাবে ঠিক কী রাখি? আমি ভিডিডলয়েড এবং ক্লাসে ফাংশনটিতে প্রথম লাইন যুক্ত করেছি ... তবে আমি কীভাবে এটি হাহা বলা যায় তা নিশ্চিত নই
ভিডোগ

1
@ ভিডোগ আপনি এটি কল করবেন না, কীবোর্ড দেখানো হলে আইওএস ফোন করবে
যেরেমিয়া নুন

4
বিজ্ঞপ্তির জন্য নিবন্ধন করা viewDidLoadভাল ধারণা নয়: আপনি এই মিলটি removeObserverকলটি কোথায় রাখবেন যাতে এই ভিসি আর প্রদর্শিত হবে না, এটি বিজ্ঞপ্তি পাওয়া বন্ধ করে দেয়? বিজ্ঞপ্তিগুলির জন্য নিবন্ধকরণ করা ভাল viewWillAppear, এবং তারপরে removeObserverকলটি করাviewWillDisappear
xaphod

5
আপনাকে "UIKeyboardFrameBeginUserInfoKey" পরিবর্তন করে "UIKeyboardFrameEndUserInfoKey" করা দরকার কারণ আপনার উদাহরণে আপনি প্রায়শই শূন্য উচ্চতা পেতে পারেন। বিবরণ: stackoverflow.com/questions/45689664/...
andreylanadelrey

26

সুইফট 4 এবং সীমাবদ্ধতা

আপনার টেবিলভিউতে নীচের নিরাপদ অঞ্চলের তুলনায় নীচে বাধা যুক্ত করুন। আমার ক্ষেত্রে সীমাবদ্ধতাটিকে টেবিলভিউবটমলআউটআউট কনস্ট্রেন্ট বলে।

@IBOutlet weak var tableViewBottomLayoutConstraint: NSLayoutConstraint!

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(notification:)), name: .UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear(notification:)), name: .UIKeyboardWillHide, object: nil)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow , object: nil)
    NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide , object: nil)
}

@objc 
func keyboardWillAppear(notification: NSNotification?) {

    guard let keyboardFrame = notification?.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue else {
        return
    }

    let keyboardHeight: CGFloat
    if #available(iOS 11.0, *) {
        keyboardHeight = keyboardFrame.cgRectValue.height - self.view.safeAreaInsets.bottom
    } else {
        keyboardHeight = keyboardFrame.cgRectValue.height
    }

    tableViewBottomLayoutConstraint.constant = keyboardHeight
}

@objc 
func keyboardWillDisappear(notification: NSNotification?) {
    tableViewBottomLayoutConstraint.constant = 0.0
}

2
এই নিরাপদ ক্ষেত্রগুলিকে বিবেচনা করে এমন যেকোন প্রশ্নের প্রথম উত্তর। ধন্যবাদ!
জাচ নিকোল

19

সুইফট আপডেট করুন 4.2

private func setUpObserver() {
    NotificationCenter.default.addObserver(self, selector: .keyboardWillShow, name: UIResponder.keyboardWillShowNotification, object: nil)
}

নির্বাচক পদ্ধতি:

@objc fileprivate func keyboardWillShow(notification:NSNotification) {
    if let keyboardRectValue = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        let keyboardHeight = keyboardRectValue.height
    }
}

এক্সটেনশান:

private extension Selector {
    static let keyboardWillShow = #selector(YourViewController.keyboardWillShow(notification:)) 
}

সুইফট 3.0 আপডেট করুন

private func setUpObserver() {
    NotificationCenter.default.addObserver(self, selector: .keyboardWillShow, name: .UIKeyboardWillShow, object: nil)
}

নির্বাচক পদ্ধতি:

@objc fileprivate func keyboardWillShow(notification:NSNotification) {
    if let keyboardRectValue = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        let keyboardHeight = keyboardRectValue.height
    }
}

এক্সটেনশান:

private extension Selector {
    static let keyboardWillShow = #selector(YourViewController.keyboardWillShow(notification:)) 
}

ডগা

UIKeyboardDidShowNotifications বা UIKeyboardWillShowNotifications দু'বার কল করা হতে পারে এবং ভিন্ন ফলাফল পেতে পারে, এই নিবন্ধটি কেন দু'বার ডাকা হবে তা ব্যাখ্যা করেছে।

সুইফটে ২.২

সুইফট 2.2 deprecates নির্বাচকরা জন্য স্ট্রিং ব্যবহার করে এবং পরিবর্তে নতুন বাক্য গঠন প্রবর্তন: #selector

কিছুটা এইরকম:

private func setUpObserver() {

    NSNotificationCenter.defaultCenter().addObserver(self, selector: .keyboardWillShow, name: UIKeyboardWillShowNotification, object: nil)
}

নির্বাচক পদ্ধতি:

@objc private func keyboardWillShow(notification:NSNotification) {

    let userInfo:NSDictionary = notification.userInfo!
    let keyboardFrame:NSValue = userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue
    let keyboardRectangle = keyboardFrame.CGRectValue()
    let keyboardHeight = keyboardRectangle.height
    editorBottomCT.constant = keyboardHeight
}

এক্সটেনশান:

    private extension Selector {

    static let keyboardWillShow = #selector(YourViewController.keyboardWillShow(_:)) 
}

3
ডিনাইটে পর্যবেক্ষককে অপসারণ করতে ভুলবেন না, যেমন: এনএসএনটিফিকেশন সেন্টার.ডেফাল্ট সেন্টার ()। অপসারণকারী (স্ব)
ট্যাপমনকি

11

সংক্ষিপ্ত সংস্করণ এখানে:

func keyboardWillShow(notification: NSNotification) {

        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            let keyboardHeight = keyboardSize.height
        }
}

1
নোটিফিকেশনের অধীনে কি-বোর্ড উইলশোর পক্ষে আপনি কী যুক্তিটি পাস করেন?
ভিডোগ

বলা মুশকিল, আমি পোস্টারের কোড ব্লকের জবাব দিচ্ছিলাম ... তবে এটি এই লাইনের সাথে মিলে যায় (ইউজারআইফোন: এনএসড অভিধান = নোটিফিকেশন.ইউসারআইএনফো!)
এলেসাইন

6

সুইফট 4

সহজ পদ্ধতি

override func viewDidLoad() {
      super.viewDidLoad()
      NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
}

func keyboardWillShow(notification: NSNotification) {  

      if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
             let keyboardHeight : Int = Int(keyboardSize.height)
             print("keyboardHeight",keyboardHeight) 
      }

}

4

সুইফট 5

override func viewDidLoad() {
    //  Registering for keyboard notification.
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
}


/*  UIKeyboardWillShowNotification. */
    @objc internal func keyboardWillShow(_ notification : Notification?) -> Void {
        
        var _kbSize:CGSize!
        
        if let info = notification?.userInfo {

            let frameEndUserInfoKey = UIResponder.keyboardFrameEndUserInfoKey
            
            //  Getting UIKeyboardSize.
            if let kbFrame = info[frameEndUserInfoKey] as? CGRect {
                
                let screenSize = UIScreen.main.bounds
                
                //Calculating actual keyboard displayed size, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381)
                let intersectRect = kbFrame.intersection(screenSize)
                
                if intersectRect.isNull {
                    _kbSize = CGSize(width: screenSize.size.width, height: 0)
                } else {
                    _kbSize = intersectRect.size
                }
                print("Your Keyboard Size \(_kbSize)")
            }
        }
    }

2

// পদক্ষেপ 1: - নোটিফিকেশনকেন্দ্র নিবন্ধন করুন

ViewDidLoad() {

   self.yourtextfield.becomefirstresponder()

   // Register your Notification, To know When Key Board Appears.
    NotificationCenter.default.addObserver(self, selector: #selector(SelectVendorViewController.keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

   // Register your Notification, To know When Key Board Hides.
    NotificationCenter.default.addObserver(self, selector: #selector(SelectVendorViewController.keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

// পদক্ষেপ 2: - কীবোর্ড প্রদর্শিত হবে বা গোপন করলে এই পদ্ধতিগুলি স্বয়ংক্রিয়ভাবে বলা হবে

    func keyboardWillShow(notification:NSNotification) {
        let userInfo:NSDictionary = notification.userInfo! as NSDictionary
        let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue
        let keyboardRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keyboardRectangle.height
        tblViewListData.frame.size.height = fltTblHeight-keyboardHeight
    }

    func keyboardWillHide(notification:NSNotification) {
        tblViewListData.frame.size.height = fltTblHeight
    }

1

জেডএফএআর 700 দ্বারা পদ্ধতিটি এক্সকোড 10 এ সুইফ্ট 5-এর জন্য আপডেট হয়েছে

override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)

}




@objc func keyboardWillShow(notification: NSNotification) {

    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        let keyboardHeight : Int = Int(keyboardSize.height)
        print("keyboardHeight",keyboardHeight)
    }

}

প্রোগ্রাম প্রয়োগের সময় এটি প্রথমবার বলা হওয়ার পরে এটি আলাদা উচ্চতা দেয়।
ব্র্যান্ডন স্টিলিটানো

0

আমি এই কাজ করতে ছিল। এটি কিছুটা হ্যাকারি। প্রস্তাবিত নয়।
তবে আমি এটি খুব সহায়ক বলে মনে

করেছি যে আমি এক্সটেনশন এবং কাঠামো তৈরি করেছি

ভিউকন্ট্রোলার এক্সটেনশন + স্ট্রাক্ট

import UIKit
struct viewGlobal{
    static var bottomConstraint : NSLayoutConstraint = NSLayoutConstraint()
}

extension UIViewController{ //keyboardHandler
 func hideKeyboardWhenTappedAround() {
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
    tap.cancelsTouchesInView = false
    view.addGestureRecognizer(tap)
 }
 func listenerKeyboard(bottomConstraint: NSLayoutConstraint) {
    viewGlobal.bottomConstraint = bottomConstraint
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
    // Register your Notification, To know When Key Board Hides.
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
 }
 //Dismiss Keyboard
 @objc func dismissKeyboard() {
    view.endEditing(true)
 }
 @objc func keyboardWillShow(notification:NSNotification) {
    let userInfo:NSDictionary = notification.userInfo! as NSDictionary
    let keyboardFrame:NSValue = userInfo.value(forKey: UIResponder.keyboardFrameEndUserInfoKey) as! NSValue
    let keyboardRectangle = keyboardFrame.cgRectValue
    let keyboardHeight = keyboardRectangle.height
    UIView.animate(withDuration: 0.5){
        viewGlobal.bottomConstraint.constant = keyboardHeight
    }
 }

 @objc func keyboardWillHide(notification:NSNotification) {
    UIView.animate(withDuration: 0.5){
        viewGlobal.bottomConstraint.constant = 0
    }
 }
}

ব্যবহার:
সর্বাধিক নীচের সীমাবদ্ধতা পান

@IBOutlet weak var bottomConstraint: NSLayoutConstraint! // default 0

ভিডিডিডলডের ভিতরে ফাংশনটি কল করুন ()

override func viewDidLoad() {
    super.viewDidLoad()

    hideKeyboardWhenTappedAround()
    listenerKeyboard(bottomConstraint: bottomConstraint)

    // Do any additional setup after loading the view.
}

এই সাহায্য আশা করি।
-আপনার পাঠ্যক্ষেত্রের বাইরে ব্যবহারকারী আলতো চাপলেই আপনার কীবোর্ড স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে এবং
- কীবোর্ড উপস্থিত হওয়ার সাথে সাথে সমস্ত দৃষ্টিভঙ্গি উপরের কীবোর্ডে ঠেলে দেবে । আপনি যখন প্রয়োজন তখন আপনি বরখাস্ত কীবোর্ড ()
ব্যবহার করতে পারেন


0

আমি নীচে কোড ব্যবহার করি,

override func viewDidLoad() {
    super.viewDidLoad()
    self.registerObservers()
}

func registerObservers(){

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}

@objc func keyboardWillAppear(notification: Notification){
    if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
        let keyboardRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keyboardRectangle.height
        self.view.transform = CGAffineTransform(translationX: 0, y: -keyboardHeight)
    }
}

@objc func keyboardWillHide(notification: Notification){
        self.view.transform = .identity
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.