আমার আইওএস অ্যাপ্লিকেশনটিতে কীবোর্ডের দৃশ্যমানতার শর্তটি আমাকে পরীক্ষা করতে হবে।
সুডোকোড:
if(keyboardIsPresentOnWindow) {
//Do action 1
}
else if (keyboardIsNotPresentOnWindow) {
//Do action 2
}
আমি কীভাবে এই শর্তটি পরীক্ষা করতে পারি?
আমার আইওএস অ্যাপ্লিকেশনটিতে কীবোর্ডের দৃশ্যমানতার শর্তটি আমাকে পরীক্ষা করতে হবে।
সুডোকোড:
if(keyboardIsPresentOnWindow) {
//Do action 1
}
else if (keyboardIsNotPresentOnWindow) {
//Do action 2
}
আমি কীভাবে এই শর্তটি পরীক্ষা করতে পারি?
উত্তর:
… বা সহজ উপায় নিন:
আপনি যখন কোনও পাঠ্য ফিল্ড প্রবেশ করেন, এটি প্রথম প্রতিক্রিয়াশীল হয়ে যায় এবং কীবোর্ডটি উপস্থিত হয়। আপনি কীবোর্ডের সাথে স্থিতি পরীক্ষা করতে পারেন [myTextField isFirstResponder]
। যদি এটি ফিরে আসে YES
, তবে কীবোর্ডটি সক্রিয় রয়েছে।
ড্রোনওয়ারওয়ার্ডের কোডটি খুব কাছাকাছি, তবে ইউআইকিট-এর নেমস্পেসের সাথে সংঘর্ষে এবং এটি ব্যবহার করা সহজতর করা যেতে পারে।
@interface KeyboardStateListener : NSObject {
BOOL _isVisible;
}
+ (KeyboardStateListener *)sharedInstance;
@property (nonatomic, readonly, getter=isVisible) BOOL visible;
@end
static KeyboardStateListener *sharedInstance;
@implementation KeyboardStateListener
+ (KeyboardStateListener *)sharedInstance
{
return sharedInstance;
}
+ (void)load
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
sharedInstance = [[self alloc] init];
[pool release];
}
- (BOOL)isVisible
{
return _isVisible;
}
- (void)didShow
{
_isVisible = YES;
}
- (void)didHide
{
_isVisible = NO;
}
- (id)init
{
if ((self = [super init])) {
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(didShow) name:UIKeyboardDidShowNotification object:nil];
[center addObserver:self selector:@selector(didHide) name:UIKeyboardWillHideNotification object:nil];
}
return self;
}
@end
+load
একটি বিশেষ পদ্ধতি যা অবজেক্টিভ-সি রানটাইম দ্বারা ডাকা হয়। অ্যাপ্লিকেশন বাইনারি লোড হওয়ার পরে এটি প্রতিটি শ্রেণীর জন্য ডাকা হয়, তবে main()
ফাংশনটি প্রবেশের আগে । কোনও অটোরিলেজ পুলটি লাইভ হবে এমন কোনও গ্যারান্টি নেই।
NSAutoreleasePool
alloc
/ release
এখন কোড পার্শ্ববর্তী দ্বারা প্রতিস্থাপিত হতে পারে@autoreleasepool { }
UIKeyboardListener
যখন আপনি জানেন কীবোর্ডটি দৃশ্যমান নয়, তখন তৈরি করুন , উদাহরণস্বরূপ ফোন [UIKeyboardListener shared]
করে applicationDidFinishLaunching
।
@implementation UIKeyboardListener
+ (UIKeyboardListener) shared {
static UIKeyboardListener sListener;
if ( nil == sListener ) sListener = [[UIKeyboardListener alloc] init];
return sListener;
}
-(id) init {
self = [super init];
if ( self ) {
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(noticeShowKeyboard:) name:UIKeyboardDidShowNotification object:nil];
[center addObserver:self selector:@selector(noticeHideKeyboard:) name:UIKeyboardWillHideNotification object:nil];
}
return self;
}
-(void) noticeShowKeyboard:(NSNotification *)inNotification {
_visible = true;
}
-(void) noticeHideKeyboard:(NSNotification *)inNotification {
_visible = false;
}
-(BOOL) isVisible {
return _visible;
}
@end
+(void)load
এই শ্রোতা শ্রেণীর দিকে কল করতে কল করতে পারেন যাতে এটি যে কোনও প্রকল্পে সাধারণভাবে একটি ড্রাগ-এন্ড-ড্রপ হিসাবে কাজ করতে পারে এবং এটি অন্য কোথাও শুরু করার কথা মনে রাখার চেয়ে দ্বিতীয় অ্যাপ্লিকেশন সূচনা থেকে শুরু করতে পারে।
আমি মনে করি আপনার কীবোর্ড সম্পর্কে প্রদত্ত বিজ্ঞপ্তিগুলি ব্যবহার করতে হবে:
কীবোর্ড বিজ্ঞপ্তি
সিস্টেমটি কীবোর্ডটি দেখায় বা লুকিয়ে রাখে, এটি বেশ কয়েকটি কীবোর্ড বিজ্ঞপ্তি পোস্ট করে। এই বিজ্ঞপ্তিগুলিতে কীবোর্ডের আকার সহ আরও তথ্য রয়েছে যা আপনি গণনাগুলির জন্য ব্যবহার করতে পারেন যা চলন্ত দর্শনগুলিতে জড়িত। এই বিজ্ঞপ্তিগুলির জন্য নিবন্ধকরণ হ'ল কীবোর্ড সম্পর্কে কিছু ধরণের তথ্য পাওয়ার একমাত্র উপায়। কীবোর্ড-সম্পর্কিত ইভেন্টগুলির জন্য সিস্টেমটি নিম্নলিখিত বিজ্ঞপ্তিগুলি সরবরাহ করে:
* UIKeyboardWillShowNotification * UIKeyboardDidShowNotification * UIKeyboardWillHideNotification * UIKeyboardDidHideNotification
এই বিজ্ঞপ্তিগুলি সম্পর্কে আরও তথ্যের জন্য, UIWindow শ্রেণির রেফারেন্সে তাদের বিবরণগুলি দেখুন। কী-বোর্ডটি কীভাবে দেখানো এবং লুকানো যায় সে সম্পর্কে তথ্যের জন্য, পাঠ্য এবং ওয়েব দেখুন see
সুইফট 3 বাস্তবায়ন
import Foundation
class KeyboardStateListener: NSObject
{
static let shared = KeyboardStateListener()
var isVisible = false
func start() {
NotificationCenter.default.addObserver(self, selector: #selector(didShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
func didShow()
{
isVisible = true
}
func didHide()
{
isVisible = false
}
}
কীবোর্ড প্রদর্শনের ইঙ্গিত হিসাবে উইন্ডো সাবভিউ হায়ারার্কি ব্যবহার হ্যাক। অ্যাপল যদি তাদের অন্তর্নিহিত বাস্তবায়ন পরিবর্তন করে তবে এই সমস্ত উত্তরগুলি ভঙ্গ হবে।
সঠিক উপায় হ'ল আপনার অ্যাপ্লিকেশন ডেলিগেটের অভ্যন্তরে বিজ্ঞপ্তি অ্যাপ্লিকেশনগুলিকে কীবোর্ড প্রদর্শন করা এবং গোপন রাখতে হবে:
AppDelegate.h এ:
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (assign, nonatomic) BOOL keyboardIsShowing;
@end
AppDelegate.m এ:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Monitor keyboard status application wide
self.keyboardIsShowing = NO;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
return YES;
}
- (void)keyboardWillShow:(NSNotification*)aNotification
{
self.keyboardIsShowing = YES;
}
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
self.keyboardIsShowing = NO;
}
তারপরে আপনি এটি ব্যবহার করে পরীক্ষা করতে পারেন:
BOOL keyboardIsShowing = ((AppDelegate*)[UIApplication sharedApplication].delegate).keyboardIsShowing;
এটি লক্ষ করা উচিত যে ব্যবহারকারী যখন ব্লুটুথ বা বাহ্যিক কীবোর্ড ব্যবহার করছেন তখন কীবোর্ড শো / লুকানোর বিজ্ঞপ্তিগুলি প্রজ্বলিত হবে না।
একটি এক্সটেনশন যুক্ত করুন
extension UIApplication {
/// Checks if view hierarchy of application contains `UIRemoteKeyboardWindow` if it does, keyboard is presented
var isKeyboardPresented: Bool {
if let keyboardWindowClass = NSClassFromString("UIRemoteKeyboardWindow"),
self.windows.contains(where: { $0.isKind(of: keyboardWindowClass) }) {
return true
} else {
return false
}
}
}
তারপরে কিবোর্ড উপস্থিত কিনা তা পরীক্ষা করে দেখুন,
if UIApplication.shared.isKeyboardPresented {
print("Keyboard presented")
} else {
print("Keyboard is not presented")
}
guard let keyboardWindowClass = NSClassFromString("UIRemoteKeyboardWindow") else { return false }; return UIApplication.shared.windows.contains(where: { $0.isKind(of: keyboardWindowClass) })
এটি অ্যাপল দ্বারা প্রকাশিত আইওএস টেক্সট প্রোগ্রামিং গাইড থেকে এখানে এসেছে: https://developer.apple.com/library/ios/docamentation/StringsTextFouts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html
আপনার ভিউডিডলডে মূলত "রেজিস্টারফোর্সকিবোর্ডনোটিকেশনস" কল করুন। তারপরে প্রতিবার কীবোর্ড সক্রিয় হওয়ার সাথে সাথে "কীবোর্ডওয়াসশাউন" ডাকা হয়। এবং প্রতিবার কীবোর্ড অদৃশ্য হয়ে গেলে, "কীবোর্ড উইলবিহিডেন" ডাকা হয়।
// Call this method somewhere in your view controller setup code.
- (void)registerForKeyboardNotifications {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];
}
// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification {
NSLog(@"Keyboard is active.");
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your app might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
[self.scrollView scrollRectToVisible:activeField.frame animated:YES];
}
}
// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification {
NSLog(@"Keyboard is hidden");
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
}
এখন iOS8 এ এই সমাধানটি অবশ্যই কাজ করে না। এটি প্রাথমিকভাবে আইওএস 4/5 এর জন্য লেখা হয়েছিল।
এই সমাধান চেষ্টা করুন:
- (BOOL) isKeyboardOnScreen
{
BOOL isKeyboardShown = NO;
NSArray *windows = [UIApplication sharedApplication].windows;
if (windows.count > 1) {
NSArray *wSubviews = [windows[1] subviews];
if (wSubviews.count) {
CGRect keyboardFrame = [wSubviews[0] frame];
CGRect screenFrame = [windows[1] frame];
if (keyboardFrame.origin.y+keyboardFrame.size.height == screenFrame.size.height) {
isKeyboardShown = YES;
}
}
}
return isKeyboardShown;
}
কয়েকটি পর্যবেক্ষণ:
সিঙ্গলটন অবজেক্টের জন্য প্রস্তাবিত প্যাটার্নটি নিম্নরূপ হবে। dispatch_once নিশ্চিত করে যে ক্লাসটি একবার থ্রেড-নিরাপদ উপায়ে আরম্ভ করা হয়েছে এবং স্থির ভেরিয়েবলটি বাইরে দৃশ্যমান নয়। এবং এটি স্ট্যান্ডার্ড জিসিডি, সুতরাং অবজেক্টিভ-সি এর নিম্ন স্তরের বিশদ সম্পর্কে জানতে হবে না।
+ (KeyboardStateListener *)sharedInstance
{
static KeyboardStateListener* shared;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [[KeyboardStateListener alloc] init];
// Other initialisations
});
return shared;
}
সাধারণত আপনি কিবোর্ডটি দৃশ্যমান কিনা তা কেবল জানতে চান না তবে এটি কতটা বড়। কীবোর্ডগুলির সবার আকার একই থাকে না। আইফোন কীবোর্ডগুলি আইপ্যাড কীবোর্ডগুলির চেয়ে ছোট। সুতরাং আপনি @property (readonly, nonatomic) CGRect keyboardRect;
নোটিশশো কীবোর্ডে সেট করা অন্য সম্পত্তি চাইবেন: পদ্ধতিটি এর মতো:
NSValue* value = notification.userInfo [UIKeyboardFrameEndUserInfoKey];
_keyboardRect = value.CGRectValue;
লক্ষ করা গুরুত্বপূর্ণ যে আয়তক্ষেত্রটি UIWindow স্থানাঙ্কে রয়েছে এবং স্ক্রিনের ঘূর্ণনকে সম্মান করে না। কলকারী কল করে যে আয়তক্ষেত্র রূপান্তরিত হবে
KeyboardStateListener* listener = [KeyboardStateListener sharedInstance];
CGRect windowRect = listener.keyboardRect;
CGRect viewRect = [myView convertRect:windowRect fromView:self.window];
কীবোর্ডটি দৃশ্যমান হওয়ার পরে যদি ব্যবহারকারী স্ক্রিনটি ঘোরান, অ্যাপ্লিকেশনটিকে বলা হবে যে কীবোর্ডটি লুকানো আছে, তারপরে আবার প্রদর্শিত হবে। যখন এটি প্রদর্শিত হয়, অন্যান্য দর্শনগুলি সম্ভবত এখনও ঘোরানো হয়নি। সুতরাং আপনি যদি কীবোর্ডের আড়াল / অনুষ্ঠানগুলি নিজেরাই পর্যবেক্ষণ করেন তবে আপনাকে যখন নির্দেশাবলীতে না প্রয়োজন স্থাবরগুলির রূপান্তর করুন
যদি ব্যবহারকারী কীবোর্ডটি বিভক্ত বা আনডক করে, বা একটি হার্ডওয়্যার কীবোর্ড ব্যবহার করে, বিজ্ঞপ্তিগুলি সর্বদা লুকানো হিসাবে কীবোর্ডটি প্রদর্শন করবে। কীবোর্ডটি আনডকিং বা মার্জ করা একটি "কিবোর্ড দেখানো" বিজ্ঞপ্তি প্রেরণ করবে।
কীবোর্ডটি লুকিয়ে থাকার সময় শ্রোতাকে অবশ্যই সূচনা করতে হবে, অন্যথায় প্রথম বিজ্ঞপ্তিটি মিস হবে এবং ধরে নেওয়া হবে যে কীবোর্ডটি এটি না থাকলে লুকানো আছে।
সুতরাং আপনি আসলে কী চান তা জানা বেশ গুরুত্বপূর্ণ। এই কোডটি কীবোর্ডের বাইরে জিনিসগুলি সরানোর জন্য কার্যকর (একটি বিভক্ত বা আনডকৃত কীবোর্ড সহ, এটি ব্যবহারকারীর দায়িত্ব)। এটি ব্যবহারকারী আপনাকে স্ক্রিনে একটি কীবোর্ড দেখতে পাবে কিনা (বিভক্ত কীবোর্ডের ক্ষেত্রে) তা আপনাকে জানায় না। এটি ব্যবহারকারী আপনাকে টাইপ করতে পারে কিনা তা উদাহরণ দেয় না (উদাহরণস্বরূপ যখন একটি হার্ডওয়্যার কীবোর্ড থাকে)। অ্যাপ্লিকেশন নিজেই অন্য উইন্ডোজ তৈরি করে তবে অন্যান্য উইন্ডোগুলি দেখার পক্ষে কাজ করে না।
দ্রুত বাস্তবায়ন:
class KeyboardStateListener: NSObject
{
static var shared = KeyboardStateListener()
var isVisible = false
func start() {
let nc = NSNotificationCenter.defaultCenter()
nc.addObserver(self, selector: #selector(didShow), name: UIKeyboardDidShowNotification, object: nil)
nc.addObserver(self, selector: #selector(didHide), name: UIKeyboardDidHideNotification, object: nil)
}
func didShow()
{
isVisible = true
}
func didHide()
{
isVisible = false
}
}
যেহেতু সুইফ্ট প্রারম্ভকালে শ্রেণি লোড পদ্ধতিটি কার্যকর করে না অ্যাপ্লিকেশন লঞ্চের সময় এই পরিষেবাটি শুরু করা গুরুত্বপূর্ণ:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool
{
...
KeyboardStateListener.shared.start()
}
এটি আমার সমাধান, এটি সবকিছুকে একটি একক স্থিতিশীল পদ্ধতিতে আবদ্ধ করে তোলে এবং আপনি এটি পরীক্ষা করতে যে কোনও জায়গায় কল করতে পারেন:
+(BOOL)isKeyboardVisible{
static id tokenKeyboardWillShow = nil;
static id tokenKeyboardWillHide = nil;
static BOOL isKbVisible = NO;
@synchronized (self) {
if (tokenKeyboardWillShow == nil){
tokenKeyboardWillShow = [[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillShowNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
@synchronized (self) {
isKbVisible = YES;
}
}];
}
if (tokenKeyboardWillHide == nil){
tokenKeyboardWillHide = [[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillHideNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
@synchronized (self) {
isKbVisible = NO;
}
}];
}
}
return isKbVisible;
}
এবং এটি সুইফটে কীভাবে করবেন তা এখানে রয়েছে:
func registerForKeyboardNotifications() {
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "keyboardWasShown:",
name: UIKeyboardDidShowNotification,
object: nil)
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "keyboardWillBeHidden:",
name: UIKeyboardWillHideNotification,
object: nil)
}
func keyboardWasShown(notification: NSNotification) {
println("Keyboard was shown");
}
func keyboardWillBeHidden(notification: NSNotification) {
println("Keyboard was dismissed");
}
নিবন্ধন করতে ভুলবেন না:
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self,
name: UIKeyboardDidShowNotification,
object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self,
name: UIKeyboardWillHideNotification,
object: nil)
}
এবং যদি আপনি "রিটার্ন" বোতাম টিপতে কীবোর্ডটি খারিজ করতে চান:
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var yourTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
registerForKeyboardNotifications()
yourTextField.delegate = self
}
func textFieldShouldReturn(textField: UITextField!) -> Bool {
self.view.endEditing(true);
return false;
}
}
এই ফাংশন চেষ্টা করুন
BOOL UIKeyboardIsVisible(){
BOOL keyboardVisible=NO;
// Locate non-UIWindow.
UIWindow *keyboardWindow = nil;
for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {
if (![[testWindow class] isEqual:[UIWindow class]]) {
keyboardWindow = testWindow;
break;
}
}
// Locate UIKeyboard.
for (UIView *possibleKeyboard in [keyboardWindow subviews]) {
// iOS 4 sticks the UIKeyboard inside a UIPeripheralHostView.
if ([[possibleKeyboard description] hasPrefix:@"<UIPeripheralHostView"]) {
keyboardVisible=YES;
}
if ([[possibleKeyboard description] hasPrefix:@"<UIKeyboard"]) {
keyboardVisible=YES;
break;
}
}
return keyboardVisible;
}
BOOL isxtxtOpen = [txtfieldObjct isFirstReponder]। যদি এটি হ্যাঁ দেয়, তবে কীবোর্ডটি সক্রিয় রয়েছে।
আবহাওয়ার কীবোর্ড প্রদর্শিত হয়েছে তা যাচাই করতে, আমরা কিবোর্ড পূর্বনির্ধারিত বিজ্ঞপ্তিগুলি ব্যবহার করতে পারি।
UIKeyboardDidShowNotifications, UIKeyboardDidHideNotifications
উদাহরণস্বরূপ আমি কীবোর্ড বিজ্ঞপ্তি শুনতে নিম্নলিখিত কোডটি ব্যবহার করতে পারি
// কীবোর্ড উপস্থিতি এবং অন্তর্ধানের জন্য শুনুন
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow:)
name:UIKeyboardDidShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidHide:)
name:UIKeyboardDidHideNotification
object:nil];
পদ্ধতিগুলিতে আমি বিজ্ঞপ্তি পেতে পারি
- (void)keyboardDidShow: (NSNotification *) notifyKeyBoardShow{
// key board is closed
}
- (void)keyboardDidHide: (NSNotification *) notifyKeyBoardHide{
// key board is opened
}
সুইফট 4
extension UIViewController {
func registerKeyboardNotifications() {
let center = NotificationCenter.default
center.addObserver(self, selector: #selector(keyboardWillBeShown(note:)), name: Notification.Name.UIKeyboardWillShow, object: nil)
center.addObserver(self, selector: #selector(keyboardWillBeHidden(note:)), name: Notification.Name.UIKeyboardWillHide, object: nil)
}
func removeKeyboardNotifications() {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
@objc
func keyboardWillBeShown(note: Notification) {}
@objc
func keyboardWillBeHidden(note: Notification) {}
}
final class MyViewController: UIViewController {
// MARK: - Properties
var isKeyboardVisible = false
// MARK: - Life Cycle
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
registerKeyboardNotifications()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
removeKeyboardNotifications()
}
// MARK: - Keyboard Handling
override func keyboardWillBeShown(note: Notification) {
isKeyboardVisible = true
let userInfo = note.userInfo
let keyboardFrame = userInfo?[UIKeyboardFrameEndUserInfoKey] as! CGRect
let contentInset = UIEdgeInsetsMake(0.0, 0.0, keyboardFrame.height, 0.0)
tableView.contentInset = contentInset
}
override func keyboardWillBeHidden(note: Notification) {
tableView.contentInset = .zero
isKeyboardVisible = false
}
// MARK: - Test
fileprivate func test() {
if isKeyboardVisible { // do something
}
}
}
আপনি পুনরুক্তি দিয়ে সমস্ত পাঠ্যদর্শন, পাঠ্যক্ষেত্র এবং লেবেলগুলি পিতামাতার দৃশ্যের সংক্ষিপ্তসারগুলিতে চেক করতে পারেন যে কোনও কিছুর সাথে এইরকম প্রথম কোনও উত্তরদাতা কিনা তা দেখতে:
-(BOOL)isKeyboardActiveInView:(UIView *)view {
for (UIView *anyView in [view subviews]) {
if ([anyView isKindOfClass:[UITextField class]]) {
if (((UITextField *)anyView).isFirstResponder) {
return YES;
}
} else if ([anyView isKindOfClass:[UILabel class]]) {
if (((UILabel *)anyView).isFirstResponder) {
return YES;
}
} else if ([anyView isKindOfClass:[UITextView class]]) {
if (((UITextView *)anyView).isFirstResponder) {
return YES;
}
} else {
if ([self isKeyboardActiveInView:anyView]) {
return YES;
}
}
}
return NO;
}
সুইট 4.2 / সুইফট 5
class Listener {
public static let shared = Listener()
var isVisible = false
// Start this listener if you want to present the toast above the keyboard.
public func startKeyboardListener() {
NotificationCenter.default.addObserver(self, selector: #selector(didShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func didShow() {
isVisible = true
}
@objc func didHide(){
isVisible = false
}
}
আমি মনে করি এটি আপনাকে সাহায্য করতে পারে,
+(BOOL)isKeyBoardInDisplay {
BOOL isExists = NO;
for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) {
if ([[keyboardWindow description] hasPrefix:@"<UITextEffectsWindow"] == YES) {
isExists = YES;
}
}
return isExists;
}
ধন্যবাদ,
নবীন শান