আইফোন কীবোর্ডটি ইউআইটিেক্সটফিল্ডকে কভার করে


120

আমার একটি অ্যাপ্লিকেশন রয়েছে যেখানে ইন্টারফেস বিল্ডারে আমি একটি সেট আপ করেছি UIViewযা দেখার নীচের অংশে একটি পাঠ্য ক্ষেত্র রয়েছে। আমি যখন অ্যাপটি চালনা করি এবং সেই ক্ষেত্রটিতে পাঠ্য প্রবেশ করার চেষ্টা করি, তখন কীবোর্ডটি ক্ষেত্রের ওপরের দিকে স্লাইড হয়ে যায় যাতে আমি কী টাইপ করছি তা আর দেখতে পাচ্ছি না যতক্ষণ না আমি আবার কীবোর্ডটি আড়াল না করি।

অন্য কেউ এই সমস্যায় পড়ে এবং পিতামাতার দৃষ্টিভঙ্গিটিকে স্ক্রোলযোগ্য না করে পাঠ্য ক্ষেত্রটিকে আরও বেশি পর্দার উপরে না সরিয়ে সমাধান করার ভাল উপায় খুঁজে পেয়েছে?


উত্তর:


290

সাধারণ সমাধান হ'ল ক্ষেত্রটি (এবং এর উপরে সমস্ত কিছু) অ্যানিমেশন সহ স্লাইড করা এবং তারপরে আপনি যখন কাজ শেষ করেন তখন ফিরে আসুন। আপনার পাঠ্য ক্ষেত্র এবং অন্যান্য আইটেমগুলির একটি অন্য ভিউতে লাগাতে হবে এবং ভিউটিকে ইউনিট হিসাবে স্লাইড করতে হবে। (আমি এই জিনিসগুলিকে "টেকটোনিক প্লেট" হিসাবে "প্লেট" বলি, তবে এটি কেবল আমার)। আপনার অভিনবত্বের প্রয়োজন না থাকলে তবে এখানে সাধারণ ধারণা।

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self animateTextField: textField up: YES];
}


- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self animateTextField: textField up: NO];
}

- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
    const int movementDistance = 80; // tweak as needed
    const float movementDuration = 0.3f; // tweak as needed

    int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

12
এটিকে ভালবাসুন যে আপনি কোডের কোনও লিঙ্ক পোস্ট করেননি, তবে কোডটি।
বেন কফম্যান

2
কোড দুর্দান্ত। এটির কাজ বা কিছু করার জন্য এটি সম্পাদনা করতে হয়নি। ধন্যবাদ ~
জেমস

5
এটি নীচের মতো সমস্ত স্ক্রিনটি toাকতে দরকারী // প্রয়োজনীয় হিসাবে
টুইট করা

3
আমার উল্লেখ করতে হবে যে "আপনি যদি আইওএস 4 বা তার পরে অ্যাপ্লিকেশন লিখছেন তবে আপনার সামগ্রীর পরিবর্তে আপনার ব্লক-ভিত্তিক পদ্ধতিগুলি ব্যবহার করা উচিত।" এর থেকে রেফারেন্স করা হয়েছে: ডেভেলপার.এপল.
ম্যাথিউ

1
এটি খুঁজে
পেয়েছে

38

এটি আমার জন্য ইউাইটেক্সটিল্ড স্লাইডিংয়ের জন্য বিস্ময়কর কাজ করেছে

বিশেষত এটি পাঠ্য ক্ষেত্রের অবস্থানের উপর নির্ভর করে স্লাইড অ্যানিমেশন দূরত্ব গণনা করার সুবিধা রয়েছে।


এটা অসাধারণ. প্রতিটি পাঠ্য ক্ষেত্রের জন্য আপনাকে কিছু 'চলন দূরত্ব' ধ্রুবক বাছাই করতে হবে না - এটি আপনার জন্য গণনা করা হয়।
jlstrecker

এখন পর্যন্ত সেরা সমাধান। ফেনোমেনাল মেকানিজম!
012

1
আইপ্যাডেও দুর্দান্ত কাজ করে। আমি সবেমাত্র PORTRAIT_KEYBOARD_HEIGHT = 264 এবং LANDSCAPE_KEYBOARD_HEIGHT = 352 আপডেট করেছি Great দুর্দান্ত লিঙ্ক। ধন্যবাদ।
খোন লাইউ

উপরের লিঙ্কটি সবেমাত্র আমার দিনটি তৈরি করেছে! বাস্তবায়নের পক্ষে এত সহজ, এখন পর্যন্ত নির্দোষভাবে কাজ করে!
জিমি জামেমেড

1
এই বিষয়টি সম্পর্কে এখানে সর্বোত্তম ব্যাখ্যা। অন্যান্য টিউটোরিয়ালগুলি সারণী দর্শন, স্ক্রোল ভিউ, ইত্যাদি ব্যবহার করে plain এটি সাধারণ এবং সরল ও সাধারণ কোনও জটিলতায় না পড়েই কাজ করে। এই উত্স ভাগ করে নেওয়ার জন্য ধন্যবাদ।
রেনেক্সান্দ্রো

28

আইকিউইবোর্ড ম্যানেজারটি আপনার জন্য কোন লাইন অফ কোডের সাহায্যে এটি করতে পারে, কেবল প্রজেক্টে সম্পর্কিত উত্স ফাইলটি টেনে আনতে এবং ছাড়তে হবে। আইকিউ কীবোর্ডম্যানেজার ডিভাইস ওরিয়েন্টেশন , অটোমেটিক ইউআইটিউলবার ম্যানেজমেন্ট , কীবোর্ড ডিস্টেন্সফ্র্যামটেক্সটফিল্ড এবং আপনি যা ভাবেন তার চেয়ে অনেক বেশি সমর্থন করে ।

এখানে চিত্র বর্ণনা লিখুন

কন্ট্রোল ফ্লো চার্টটি এখানে: ফ্লো চার্ট নিয়ন্ত্রণ করুন

1 ম ধাপ: - বিশ্বব্যাপী বিজ্ঞপ্তিগুলি যোগ করা হয়েছে UITextField, UITextViewএবং UIKeyboardএকটি Singleton ক্লাসে। আমি একে আইকিউ কীবোর্ড ম্যানেজার বলেছি

পদক্ষেপ 2: - যদি পাওয়া যায় UIKeyboardWillShowNotification, UITextFieldTextDidBeginEditingNotificationবা UITextViewTextDidBeginEditingNotificationবিজ্ঞপ্তিগুলি পাওয়া যায় , তাহলে শ্রেণিবদ্ধের topMostViewControllerথেকে উদাহরণ নেওয়ার চেষ্টা করুন UIWindow.rootViewController। সঠিকভাবে উন্মোচিত করার জন্য UITextField/ UITextViewএটিতে, topMostViewController.viewএর ফ্রেম স্থায়ী করা প্রয়োজন।

স্টিপি 3: -topMostViewController.view প্রথমে প্রতিক্রিয়া UITextField/ সম্পর্কিত সম্মানের সাথে প্রত্যাশিত চলার দূরত্ব গণনা করা UITextView

ধাপ 4: - সরানো হয়েছে topMostViewController.view.frameউপরের / প্রত্যাশিত পদক্ষেপ দূরত্ব অনুযায়ী নিচে।

পদক্ষেপ 5: - যদি পাওয়া যায় বা বিজ্ঞপ্তিটি পাওয়া যায় UIKeyboardWillHideNotification, তবে আবার শ্রেণিবদ্ধের থেকে উদাহরণ নেওয়ার চেষ্টা করুন ।UITextFieldTextDidEndEditingNotificationUITextViewTextDidEndEditingNotificationtopMostViewControllerUIWindow.rootViewController

পদক্ষেপ:: - গণিত বিরক্তিকর দূরতাকেtopMostViewController.view এর মূল অবস্থানে পুনরুদ্ধার করা দরকার।

পদক্ষেপ:: -topMostViewController.view.frame বিরক্তিকর দূরত্ব অনুযায়ী পুনরুদ্ধার করা।

Step8: - instantiated Singleton IQKeyboardManager অ্যাপ্লিকেশন লোড বর্গ উদাহরণস্বরূপ, তাই UITextField/ UITextViewapp এর মধ্যে স্বয়ংক্রিয়ভাবে প্রত্যাশিত পদক্ষেপ দূরত্ব অনুযায়ী সামঞ্জস্য হবে।

এখানেই শেষ


গৃহীত উত্তরটি আমার পক্ষে কাজ করছে না। কিন্তু এই এক না।
শিক্ষার্থী

@ জায়েমিজাএফএআর আইকিউ কীবোর্ডম্যানেজার আইপ্যাডের জন্যও অনুকূলিত হয়েছে। আপনি দয়া করে গ্রন্থাগার গিথুব রেপোতে কোনও সমস্যা খুলতে এবং আইপ্যাডের মাধ্যমে সমস্যাটি প্রদর্শনের জন্য একটি ডেমো প্রকল্প আপলোড করতে পারেন?
মোহাম্মদ ইফতেখার কুরেশি

উত্তর দেওয়ার জন্য ধন্যবাদ. সমস্যাটি যদি অব্যাহত থাকে তবে আমি তা করব, আপনি মন্তব্য করার আগে আমি ভেবেছিলাম যে আইকিউকিবোর্ডম্যানেজার সর্বজনীন ডিভাইসের জন্য নয়।
জায়েম জাএফএআর

আরও তদন্ত করে, সিমুলেটারে আইপ্যাডের সাথে এটি ঠিক কাজ করছে তবে আসল আইপ্যাড ডিভাইসে নয়। আইফোনেও পুরোপুরি সূক্ষ্মভাবে কাজ করা (ডিভাইস + সিমুলেটর)। ঘটনাটি কী হতে পারে ?
জায়েম জাএফএআর

আমি আগেই বলেছি, আপনার আইওএস এবং ডিভাইস সংস্করণ বিবরণ দিয়ে ডেমো প্রকল্পের সাথে গিথুব রেপোতে আপনার একটি সমস্যা উত্থাপন করা উচিত, যাতে আমরা সমস্যাটি দেখতে পারি।
মোহাম্মদ ইফতেখার কুরশী

7

Amagrammer উত্তরের প্রসারিত করতে এখানে একটি নমুনা শ্রেণি রয়েছে:

LoginViewController.h

@interface LoginViewController : UIViewController <UITextFieldDelegate> {

}

@property (nonatomic, retain) IBOutlet UITextField    *emailTextField;
@property (nonatomic, retain) IBOutlet UITextField    *passwordTextField;

লক্ষ্য করুন আমরা "UITextFieldDelegate" বাস্তবায়ন করছি

LoginViewController.m

@implementation LoginViewController
@synthesize emailTextField=_emailTextField;
@synthesize passwordTextField=_passwordTextField;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        //Register to receive an update when the app goes into the backround
        //It will call our "appEnteredBackground method
        [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(appEnteredBackground)
                                                 name:UIApplicationDidEnterBackgroundNotification
                                               object:nil];
    }
    return self;
}


- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
    const int movementDistance = 80; // tweak as needed
    const float movementDuration = 0.3f; // tweak as needed

    int movement = (up ? -movementDistance : movementDistance);

    [UIView beginAnimations: @"anim" context: nil];
    [UIView setAnimationBeginsFromCurrentState: YES];
    [UIView setAnimationDuration: movementDuration];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self animateTextField: textField up: YES];
}


- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self animateTextField: textField up: NO];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
//This is called when the app goes into the background.
//We must reset the responder because animations will not be saved
- (void)appEnteredBackground{
    [self.emailTextField resignFirstResponder];
    [self.passwordTextField resignFirstResponder];
}

উল্লেখ করার জন্য +1 UIApplicationDidEnterBackgroundNotification, অন্যথায় যদি কেউ হোম বোতাম টিপায় এবং আরও অ্যাপটিতে ফিরে আসে তবে এটি আরও কৃপণ এবং বগিযুক্ত হবে it
আদিল সোমো

7

অফিসিয়াল সমাধান সম্পর্কে কী: কীবোর্ডের নীচে অবস্থিত সামগ্রী সরিয়ে নেওয়া

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

  1. কীবোর্ডের আকার পান।
  2. কীবোর্ডের উচ্চতা অনুসারে আপনার স্ক্রোল ভিউয়ের নীচের সামগ্রীটি ইনসেট করুন।
  3. লক্ষ্য পাঠ্য ক্ষেত্রটি স্ক্রোল করুন।
// 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
{
    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
{
    UIEdgeInsets contentInsets = UIEdgeInsetsZero;
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;
}

এই সরকারী সমাধানটি এখন একটি নিয়ন্ত্রণে জড়িয়ে আছে
মোহাম্মদ ইফতেখার কুরেশি

আইডিয়া ভাল, কিন্তু 'contentInset' সম্পত্তি এখানে সাহায্য না করে তাহলে Coz contentInset শুধু আপনার প্যাডিং প্রভাব প্রদান করবে: stackoverflow.com/a/10049782/260665
রাজ পবন Gumdal

@ রাজ, আমি আইকিউইবোর্ডে ম্যানেজারের দিকে নজর রাখতে পারি সে ক্ষেত্রে এটি হতে পারে তবে এখনও আইটেমিকিবোর্ড ম্যানেজারের গিথুব সংগ্রহশালা সম্পর্কিত বিষয়বস্তু ইনসেট সম্পত্তি সম্পর্কিত বিষয় সম্পর্কে কেউই কোনও সমস্যা খোলে না, তাই আমি ধরে নিচ্ছি এটি কাজ করছে।
মোহাম্মদ ইফতেখার কুরেশি

7

UITableView টেক্সটফিল্ড কোষগুলিতে আমার একই সমস্যার মুখোমুখি । আমি কীবোর্ড বিজ্ঞপ্তি শুনতে নিম্নলিখিত পদ্ধতিটি প্রয়োগ করে এই সমস্যাটি সমাধান করি।

এখানে বিজ্ঞপ্তিগুলির জন্য পর্যবেক্ষক:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];

নীচের ফাংশনটি ব্যবহার করে সেই বিজ্ঞপ্তিগুলি পরিচালনা করুন:

(void)keyboardWasShown:(NSNotification*)aNotification 
(void)keyboardWillBeHidden:(NSNotification*)aNotification 

1
লিঙ্কটি নষ্ট হয়ে গেছে। ভবিষ্যতে একটি স্বাধীন সমাধান সহ বিবেচনা করুন!
মাইক

5

এটা দেখ. আপনার কোন ঝামেলা নেই

এই সমাধানটি খুব ঝরঝরে। আপনাকে যা করতে হবে তা হ'ল আপনার পাঠ্যক্ষেত্রগুলিকে একটিতে যুক্ত করা UIScrollViewএবং TPKeyboardAvoidingScollViewআপনি যদি স্টোরিবোর্ডগুলি ব্যবহার করছেন তবে এর শ্রেণিটিতে পরিবর্তন করা । স্ক্রোল ভিউটি এমনভাবে প্রসারিত করা হয়েছে যাতে কীবোর্ড দৃশ্যমান হয় তা সনাক্ত করতে পারে এবং যুক্তিসঙ্গত দূরত্বে নিজেকে কী-বোর্ডের উপরে সরিয়ে নিয়ে যায়। এটি নিখুঁত সমাধান কারণ এটি আপনার থেকে পৃথক UIViewController। প্রতিটি প্রয়োজনীয় জিনিস উপরে বর্ণিত শ্রেণীর মধ্যে সম্পন্ন করা হয়। মাইকেল টাইসন এবং সমস্ত ধন্যবাদ।

TPKeyboardAvoiding


@ নান্নাভ - আপনি যখন কোনও উত্তর পরিবর্তন করার পরামর্শ দিবেন দয়া করে মন্তব্যগুলি সরবরাহ করুন।
সুরক্ষা মাউন্ট

5

নীচে অ্যামগ্রামারের উত্তরের একটি দ্রুত সংস্করণ দেওয়া আছে। এছাড়াও, UIKeyboardWillShowNotifications ইভেন্ট ব্যবহার করে একটি ভিন্নতা যেহেতু ভিউটিকে সরানোর আগে আমাকে কীবোর্ডগুলির আকারটি জানতে হবে।

var keyboardHeight:CGFloat = 0

override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillChange:", name: UIKeyboardWillShowNotification, object: nil)
}

func textFieldDidBeginEditing(textField: UITextField) {
    //keyboardWillChange (below) is used instead of textFieldDidBeginEditing because textFieldDidBeginEditing
    //is called before the UIKeyboardWillShowNotification necessary to determine the keyboard height.
}

func textFieldDidEndEditing(textField: UITextField) {
    animateTextField(false)
}

func animateTextField(textFieldUp:Bool) {
    let movementDistance:CGFloat = keyboardHeight
    let movementDuration = 0.3

    let movement:CGFloat = (textFieldUp ? -movementDistance : movementDistance)

    UIView.beginAnimations("anim", context: nil)
    UIView.setAnimationBeginsFromCurrentState(true)
    UIView.setAnimationDuration(movementDuration)
    self.view.frame = CGRectOffset(self.view.frame, 0, movement)
    UIView.commitAnimations()
}

func keyboardWillChange(notification:NSNotification) {
    let keyboardRect:CGRect = ((notification.userInfo![UIKeyboardFrameEndUserInfoKey])?.CGRectValue)!
    keyboardHeight = keyboardRect.height
    animateTextField(true)
}

4

অস্পষ্ট না করে পাঠ্যক্ষেত্র সম্পাদনা করার ক্ষেত্রে দুর্দান্ত হাঁটাচলা ছিল (লিঙ্কটি এখন মৃত, এখানে একটি ওয়েব্যাক লিংক: https://web.archive.org/web/20091123074029/http://acts-as-geek.blogspot.com/2009/ 11 / সম্পাদনা-পাঠ্যক্ষেত্র-ছাড়াই-অস্পষ্টতা html )। এটি দেখায় যে কীভাবে কোনও বিদ্যমানটিকে UIViewকোনওটিতে স্থানান্তরিত করা যায় UIScrollViewএবং কীবোর্ড প্রদর্শিত হলে এটি স্বয়ংক্রিয়ভাবে স্ক্রোল করা যায়।

আমি UIScrollViewযখন নীচে নিয়ন্ত্রণ (যেমন একটি UITabBar) থাকে তখন সঠিক উচ্চতা গণনা করতে এটি কিছুটা আপডেট করেছি UIScrollBarপোস্টটি ইউভিউ আপডেট করে দেখুন ।


2

এক্সকোড 5, আইওএস 7 ব্যবহার করে এখানে একটি সমাধান দেওয়া হয়েছে:

ইউআইটিেক্সটফিল্ডডেলিগেট এবং অ্যানিমেশন ব্লক ব্যবহার করুন।

এটি ভিউকন্ট্রোলারের প্রায় সমস্ত কোড তবে আমি প্রতিনিধিদের প্যাটার্নের সাথে এখনও কিছুটা অপরিচিত তাদের জন্য ডেলিগেট কোডটি অন্তর্ভুক্ত করতে চেয়েছিলাম (আমার মতো)। আপনি পাঠ্যদর্শন থেকে দূরে ট্যাপ করার সময় কীবোর্ডটি লুকানোর কোডও আমি অন্তর্ভুক্ত করেছি।

আপনি দৃশ্যের (বোতাম, টেক্সটফিল্ডস, ইত্যাদি) সর্বাধিক উঁচুতে সরাতে পারেন যতটা আপনি চাইছেন ঠিক সেগুলি আবার স্থানে রেখে দেওয়া (+100 তারপরে -100)।

@interface ViewController () <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet UITextField *MyTextField;

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.MyTextField.delegate = self;

}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
      NSLog(@"text began editing");

      CGPoint MyPoint = self.MyTextField.center;

      [UIView animateWithDuration:0.3
                    animations:^{

                    self.MyTextField.center = CGPointMake(MyPoint.x, MyPoint.y - 100);
                                }];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
     NSLog(@"text ENDED editing");

     CGPoint MyPoint = self.MyTextField.center;

     [UIView animateWithDuration:0.3
                 animations:^{

     self.MyTextField.center = CGPointMake(MyPoint.x, MyPoint.y + 100);
                             }];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     [self.view endEditing:YES];
}

1

আমি অনুমান করি যে এক উপায় হ'ল আপনার সম্পূর্ণ দর্শন অবস্থানটি (x, y) থেকে (x, y-keybaardHeight) এ স্থানান্তরিত করা হবে যখন পাঠ্যক্ষেত্রটি ক্লিক করা হবে এবং কীবোর্ড খারিজ হয়ে গেলে এটি আবার রেখে দেওয়া হবে, কেবল দর্শন হিসাবে কিছুটা অদ্ভুত লাগবে আসে (আপনি এনিমেট করলে এটি খারাপ লাগবে না)

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    CGRect frame=self.view.frame;
    frame.origin=CGPointMake(x...//set point here
    self.view.frame=frame;
}

না এইটা না. ব্যবহারকারী যদি প্রথম পাঠ্যক্ষেত্রটি ট্যাপ করে তবে এটি দৃশ্যমান ক্ষেত্রের উপরে উঠবে।
lolol

0

অ্যামাগ্রামার এর সমাধান ছাড়াও, আপনি যদি প্রতিকৃতি মোডে কোকোস 2 ডি ব্যবহার করেন তবে এই লাইনটি পরিবর্তন করুন:

self.view.frame = CGRectOffset(self.view.frame, 0, movement);

এটি:

[CCDirector sharedDirector].openGLView.frame = CGRectOffset([CCDirector sharedDirector].openGLView.frame, movement, 0);

আপনি আড়াআড়ি মোডে cocos2d ব্যবহার করে থাকেন, উপরে পরিবর্তন করতে এবং সুইচ upমান textFieldDidBeginEditing:এবংtextFieldDidEndEditing:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    [self animateTextField:textField up:NO];
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [self animateTextField:textField up:YES];
}

0

আমার একই সমস্যা ছিল এবং আমি জিটিকিবোর্ডহেল্পারকে একটি সহজ উপায় হতে পেলাম।

আপনার প্রকল্পের ফ্রেমওয়ার্কটি টেনে নিয়ে যাওয়ার পরে শিরোনাম ফাইলটি অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ প্রকল্পটি ডাউনলোড করুন এবং খুলুন, তারপরে xib এর অবজেক্ট বিভাগ থেকে "কীবোর্ড সহায়ক" অবজেক্টটি আপনার প্রকল্পের ইন্টারফেস বিল্ডারের অবজেক্ট বিভাগে টেনে আনুন।

আপনার সমস্ত দর্শনগুলি "কীবোর্ড সহায়ক" এর শিশু হতে টেনে আনুন।


0

আমি আমার প্রকল্পগুলিতে যে ফ্রেম ফ্রেম ব্যবহার করি তা টেনে আনুন drop আপনি যখন প্রথম কোনও উত্তরদাতার বাইরে ট্যাপ করেন বা যখন আপনি স্ক্রোল করেন তখন স্বয়ংক্রিয় বরখাস্তকে সমর্থন করে।

GTKeyboardHelper


0

প্রয়োজন অনুযায়ী ভিউটি উপরে এবং নীচে স্লাইড করুন:

- (void)textFieldDidEndEditing:(UITextField *)textField {
    self.currentTextField = nil;
    [self animateTextField: textField up: NO];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [self.currentTextField resignFirstResponder];
    return YES;
}

- (void) animateTextField:(UITextField*) textField up:(BOOL)up {
    const int movementDistance = 80; // tweak as needed
    const float movementDuration = 0.3f; // tweak as needed

    int movement = (up ? -movementDistance : movementDistance);

    [UIView animateWithDuration:movementDuration animations:^{
        self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    }];
}

selfএকটি UITextFieldDelegateহিসাবে এবং আসল পাঠ্য ফিল্ড হিসাবে সেট করতে ভুলবেন না delegate

(আম্মাগ্রামারকে ধন্যবাদ, অ্যানিমেশনগুলির জন্য ব্লক ব্যবহার করে এটি কেবল একটি ছোট উত্তর)


0

আপনি চাইলে আমার আর কিছু আছে। এখানে বক্তব্যটি হ'ল আপনি যে পাঠ্যক্ষেত্রটি সম্পাদনা করছেন তাতে কেন্দ্রটি আপনার ইউআইভিউউকে সেট করতে চান।

যে আগে, আপনার সংরক্ষণ করতে হবে INITIAL_CENTER হিসেবে, CGPoint self.view.center এবং আপনার থেকে INITIAL_VIEW হিসেবে CGRect একটি const সম্পত্তিতে self.view.frame থেকে।

আপনি এই জাতীয় পদ্ধতি তৈরি করতে পারেন:

- (void) centerOn: (CGRect) fieldFrame {

    // Set up the center by taking the original view center
    CGPoint center = CGPointMake(INITIAL_CENTER.x,
                             INITIAL_CENTER.y - ((fieldFrame.origin.y + fieldFrame.size.height/2) - INITIAL_CENTER.y));


    [UIView beginAnimations:@"centerViewOnField" context:nil];
    [UIView setAnimationDuration:0.50];

    if (CGRectEqualToRect(fieldFrame,INITIAL_VIEW)) {
        self.view.frame = INITIAL_VIEW;
        [self.view setCenter:INITIAL_CENTER];
    } else {
        [self.view setCenter:center];
    }


    [UIView commitAnimations];
}

তারপরে, আপনার ইউআইটিেক্সটফিল্ডডেলিগেটে আপনাকে নিম্নলিখিত পদ্ধতিগুলিতে সেন্টার অন: (সিজিআরেক্ট) কল করতে হবে :

টেক্সটফিল্ডডিজইগেইন সম্পাদনা: (UITextField *) একটি প্যারামিটার হিসাবে আপনি যে পাঠ্য ক্ষেত্রটি কেন্দ্র করতে চান তার ফ্রেম।

এবং আপনাকে এটি আপনার ইভেন্ট হ্যান্ডলারে কল করতে হবে, যেখানে আপনি নিজের কীবোর্ডটি বন্ধ করেন,

টেক্সটফিল্ডএইডএইডিটিং: (ইউআইটিেক্সটফিল্ড *) এটি করার অন্যতম উপায় হতে পারে, INITIAL_VIEW কে কেন্দ্রের প্যারামিটার হিসাবে স্থাপন করুন : (সিজিআরেক্ট)


0

আমি আইওএসের নতুন সংস্করণগুলিতে বিশ্বাস করি (6.1+, সম্ভবত এর আগেও সম্ভবত), অন্তর্নিহিত ভিউ, কমপক্ষে ইউআইটিবেবলের জন্য, কীবোর্ড পপ আপ হওয়ার পরে স্বয়ংক্রিয়ভাবে সঙ্কুচিত হয়। সুতরাং আপনাকে কেবলমাত্র সেই ভিউটিতে পাঠ্য ক্ষেত্রটি দৃশ্যমান করতে হবে। ইন init:

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

তারপর:

- (void)keyboardWasShown:(NSNotification*)notification
{
    // Scroll the text field into view so it's not under the keyboard.
    CGRect rect = [self.tableView convertRect:inputView.bounds fromView:inputView];
    [self.tableView scrollRectToVisible:rect animated:YES];
}

0

https://github.com/ZulwiyozaPutra/Shift-Keyboard- উদাহরণ আমি আশা করি এই সমাধানটি সাহায্য করেছে। তারা সব সুইফট 3 লিখিত।

//
//  ViewController.swift
//  Shift Keyboard Example
//
//  Created by Zulwiyoza Putra on 11/23/16.
//  Copyright © 2016 Zulwiyoza Putra. All rights reserved.
//

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    
    
    //connecting textfield from storyboard
    @IBOutlet weak var textField: UITextField!
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        subscribeToKeyboardNotifications()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        self.textField.delegate = self
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        unsubscribeFromKeyboardNotifications()
    }
    
    //Hide keyboard after finished editing
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
    
    //Setup view before keyboard appeared
    func keyboardWillAppear(_ notification:Notification) {
        view.frame.origin.y = 0 - getKeyboardHeight(notification)
    }
    
    //Setup view before keyboard disappeared
    func keyboardWillDisappear(_ notification: Notification) {
        view.frame.origin.y = 0
    }
    
    //Getting keyboard height
    func getKeyboardHeight(_ notification:Notification) -> CGFloat {
        let userInfo = notification.userInfo
        let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue // of CGRect
        return keyboardSize.cgRectValue.height
    }
    
    //Subscribing to notifications to execute functions
    func subscribeToKeyboardNotifications() {
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(_:)), name: .UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear(_:)), name: .UIKeyboardWillHide, object: nil)
    }
    
    //Unsubscribing from notifications
    func unsubscribeFromKeyboardNotifications() {
        NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil)
        NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil)
    }
    
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.