আইফোন কীবোর্ডের উপরে একটি সরঞ্জামদণ্ডকে প্রোগ্রামগতভাবে সারিবদ্ধ করুন


94

বেশ কয়েকটি ক্ষেত্রে আমি আইফোন কীবোর্ডের শীর্ষে একটি সরঞ্জামদণ্ড যুক্ত করতে চাই (যেমন আইফোন সাফারি যেমন আপনি ফর্ম উপাদানগুলি নেভিগেট করছেন, উদাহরণস্বরূপ)।

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

বর্তমান দৃশ্যের সাথে সম্পর্কিতভাবে কিবোর্ডের অবস্থানটি প্রোগ্রামিকভাবে নির্ধারণ করার কোনও উপায় আছে?

উত্তর:


141

আইওএস ৩.২ অনুসারে এই প্রভাবটি অর্জনের একটি নতুন উপায় রয়েছে:

UITextFieldsএবং UITextViewsএকটি inputAccessoryViewসম্পত্তি আছে, যা আপনি যে কোনও দৃশ্যে সেট করতে পারেন যা স্বয়ংক্রিয়ভাবে উপরে প্রদর্শিত হবে এবং কীবোর্ডের সাথে অ্যানিমেটেড হবে।

মনে রাখবেন যে আপনি যে ভিউটি ব্যবহার করছেন সেটি অন্য কোথাও ভিউ হায়ারার্কির মধ্যে হওয়া উচিত নয় বা এটি কোনও তত্ত্বাবধানে যুক্ত করা উচিত নয়, এটি আপনার জন্য করা হয়েছে।


আমাকে চেষ্টা করতে দাও . যদিও এটি সেরা উপায়ে দেখায়।
হারশালব

কি দারুন. কি সন্ধান! ধন্যবাদ (আমি এটি কঠিন উপায়ে করেছি এবং এটি অগোছালো)
le ই

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

তবে কীভাবে ইউআইবিউবভিউতে একটি সরঞ্জামদণ্ড যুক্ত করা যায়? :(
দিমিত্রি

আমি এটি স্ট্যান্ডার্ড ইউআইউইউভিউ ভিউ টুলবারে বোতামগুলি প্রতিস্থাপন করে করেছি (এটি মুছে ফেলার জন্য একই কোড)।
দিমিত্রি

72

সুতরাং মূলত:

আর ডি পদ্ধতিতে:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object:nil];

এবং তারপরে বারের অবস্থানটি সামঞ্জস্য করার জন্য উপরের পদ্ধতিগুলি উল্লেখ করুন:

-(void) keyboardWillShow:(NSNotification *) note
{
    CGRect r  = bar.frame, t;
    [[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &t];
    r.origin.y -=  t.size.height;
    bar.frame = r;
}

এটিকে মোড়ানো করে অবস্থান পরিবর্তনটি অ্যানিমেট করে এটি সুন্দর করতে পারে

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
//...
    [UIView commitAnimations];

আজ সকালে আমার পুরানো জিনিসগুলি ঘুরে দেখছিল এবং লক্ষ্য করেছে যে এটি একটি আরও ভাল এবং সবচেয়ে বিস্তৃত উত্তর। ধন্যবাদ!
রব ড্র্মি

এই উত্তরটি এখনও এক বছর পরে বেশ প্রাসঙ্গিক। এটি সম্পর্কিত কিছু বিকাশ করার সময় এটি আমাকে কুঁচকে উঠতে সহায়তা করেছে।
জেমস_উম্যাক

4
এই প্রশ্নটি নিয়ে এখন হোঁচট খাচ্ছে এমন লোকদের জন্য কেবল একটি সতর্কতা: ইউআইকিবোর্ডবাউন্ডসউজারআইনফোকিকে এখন আইফোন ওএস ৩.২-এ অবমুক্ত করা হয়েছে। অন্যান্য অন্যান্য, অনুরূপ রয়েছে UIKeyboardFrameBeginUserInfoKeyযা একই তথ্য দেয়।
স্টিফেন ডার্লিংটন

9
এটি করার জন্য আরও ভাল নতুন উপায় আছে আইওএস 3.২-তে ইউআইটিেক্সটফিল্ড এবং ইউআইটিেক্সটভিউতে ইনপুটঅ্যাক্সেসরিভিউ সম্পত্তি।
টনক্লন

6
এই উত্তরটি একটি টনকে সহায়তা করেছে তবে কিছুটা তারিখের। UIKeyboardFrameEndUserInfoKeyআপনার কীবোর্ডের চূড়ান্ত ফ্রেম (স্ক্রিন স্থানাঙ্কে) পেতে ব্যবহার করা উচিত । আপনি ব্যবহার করতে পারেন UIKeyboardAnimationDurationUserInfoKeyএবং UIKeyboardAnimationCurveUserInfoKeyবাকি পরামিতিগুলি পেতে আপনার কীবোর্ডের আচরণের সাথে ঠিক মেলে নেওয়া দরকার match
ডেভ পেক

60

এটি টোনক্লোন থেকে বিদ্যমান উত্তরের উপর ভিত্তি করে - আমি কেবল একটি কোড স্নিপেট যুক্ত করছি যা কীবোর্ডের উপরে একটি অর্ধ স্বচ্ছ কালো টুলবারটি দেখায়, ডানদিকে একটি "সম্পন্ন" বোতামটি সহ:

UIToolbar *toolbar = [[[UIToolbar alloc] init] autorelease];
[toolbar setBarStyle:UIBarStyleBlackTranslucent];
[toolbar sizeToFit];

UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)];

NSArray *itemsArray = [NSArray arrayWithObjects:flexButton, doneButton, nil];

[flexButton release];
[doneButton release];
[toolbar setItems:itemsArray];

[aTextField setInputAccessoryView:toolbar];

এবং -resignKeyboardচেহারা মত:

-(void)resignKeyboard {
  [aTextField resignFirstResponder];
}

আশা করি যে কাউকে সাহায্য করবে


4
ঠিক আগেরটি আগের জায়গায় পাওয়ার বিষয়ে একটু মন্তব্য যুক্ত করুন। ইউআইএসেগমেন্টেড কন্ট্রোল * সেগমেন্টকন্ট্রোল = [[ইউআইজিগমেন্টেড কন্ট্রোল বরাদ্দ] initWithItems: [এনএসআর অ্যারে উইথঅবজেক্টস: @ "পূর্ববর্তী", @ "পরবর্তী", শূন্য]]; [সেগমেন্টকন্ট্রোল সেটসাইগমেন্টেড কন্ট্রোলস্টাইল: ইউআইএসগমেন্টেড কন্ট্রোলস্টাইলবার]; [সেগমেন্টকন্ট্রোল অ্যাড টার্গেট: স্ব-ক্রিয়া: @ নির্বাচনকারী (পরের প্রিরিয়ুয়াল :) কন্ট্রোলএভেন্টস: ইউআইসিএন্ট্রোলভেন্টভ্যালুচেনজড];
ট্রাস্তি থোর

4
@ ট্রাস্টিথর এর মন্তব্যে একটি সংযোজন: টুলবারে যুক্ত করার জন্য আপনাকে একটি ইউআইবারবার্টন আইটেমে সেগমেন্টেড কন্ট্রোলটি আবৃত করতে হবে।
টিম বাথ

দুর্দান্ত - এটি আমার প্রয়োজনীয় সমস্ত কোড। পোস্ট করার জন্য ধন্যবাদ :)
প্রসারিত

তবে ইউআইবিউবভিউ সম্পর্কে কী? এটিতে কীভাবে একটি সরঞ্জামদণ্ড যুক্ত করবেন?
দিমিত্রি

24

আপনি যদি কীবোর্ড বিজ্ঞপ্তিগুলির জন্য, যেমন UIKeyboardWillShowNotification UIKeyboardWillHideNotification, ইত্যাদির জন্য নিবন্ধন করেন তবে আপনি যে বিজ্ঞপ্তিটি পেয়েছেন তাতে userInfoডিক ( UIKeyboardBoundsUserInfoKey) এর মধ্যে কীবোর্ডের সীমা থাকবে ।

দেখুন UIWindowবর্গ রেফারেন্স।


16

৩.০ এবং তার উপরে আপনি userInfoবিজ্ঞপ্তির অভিধান থেকে অ্যানিমেশন সময়কাল এবং বক্ররেখা পেতে পারেন ।

উদাহরণস্বরূপ, কীবোর্ডের জন্য জায়গা তৈরি করার জন্য ভিউটির আকারটি সঞ্চারিত করতে, নিবন্ধন করুন UIKeyboardWillShowNotificationএবং নীচের মতো কিছু করুন:

- (void)keyboardWillShow:(NSNotification *)notification
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
    [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];

    CGRect frame = self.view.frame;
    frame.size.height -= [[[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size.height;
    self.view.frame = frame;

    [UIView commitAnimations];
}

এর জন্য অনুরূপ অ্যানিমেশন করুন UIKeyboardWillHideNotification


পোস্ট করার জন্য thanks.০ এসডিকে ধন্যবাদ দেওয়ার জন্য এটি আরও ভাল উপায় বলে মনে হচ্ছে!
হুয়া-ইং

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

4
@ রায়ানজেএম: ভিউ স্ক্রিনটি বন্ধ থাকাকালীন ফার্স্ট রেসপন্ডার এবং পদত্যাগ করুন ফার্স্ট রেসপন্ডারের অদ্ভুত আচরণ রয়েছে। পরিবর্তে আপনার ভিউউইল অ্যাপয়ার পদ্ধতি থেকে আপনার হয়ে উঠুন ফার্স্ট রেসপন্ডারকে calling
ডেভিড বেক

0

এই পদ্ধতিটি তৈরি করুন এবং এটিকে ViewWillLoad এ কল করুন:

        - (void) keyboardToolbarSetup
{
    if(self.keyboardToolbar==nil)
        {
        self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];

        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(anyAction)];

        UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(anyOtherAction)];


        NSArray *toolbarButtons = [[NSArray alloc]initWithObjects:cancelButton,extraSpace,doneButton, nil];

        [self.keyboardToolbar setItems:toolbarButtons];

        self.myTextView.inputAccessoryView=self.keyboardToolbar;
        }
}

-3

কীবোর্ড দর্শনের মাত্রা পাওয়ার জন্য কোনও উপায় (এএফআইকে) নেই। এটি অবশ্য ধ্রুবক, কমপক্ষে এখনও পর্যন্ত প্রতিটি আইফোন সংস্করণে।

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

যেমন

#define KEYBOARD_HEIGHT 240 // example - can't remember the exact size
#define TOOLBAR_HEIGHT 30

toolBarRect.origin.y = viewRect.size.height - KEYBOARD_HEIGHT - TOOLBAR_HEIGHT;

// move toolbar either directly or with an animation

সংজ্ঞায়নের পরিবর্তে আপনি সহজেই একটি তৈরি করতে পারেন keyboardHeight ফাংশন যা কীবোর্ড প্রদর্শিত হচ্ছে কিনা তার উপর ভিত্তি করে আকারটি ফিরিয়ে দেয় এবং এই সরঞ্জামদণ্ডের অবস্থানটি একটি পৃথক ফাংশনে স্থানান্তর করে যা আপনার বিন্যাসটিকে পুনর্গঠিত করে।

এছাড়াও আপনি যেখানে এই অবস্থানটি করেন তার উপরও নির্ভর করতে পারে কারণ এটি আপনার নভবার সেটআপের ভিত্তিতে লোড হওয়া এবং প্রদর্শিত হওয়ার মধ্যে আপনার ভিউয়ের আকার পরিবর্তন হতে পারে possible আমি বিশ্বাস করি এটি করার সর্বোত্তম জায়গাটি ভিউইল অ্যাপ্লায় হবে।


এটি দুর্দান্ত কাজ করেছে, ধন্যবাদ! এখনও অবধি আমি ইউআইকিবোর্ডডিডশ শো নোটিকেশন দ্বারা ট্রিগারযুক্ত নির্বাচকটিতে এই গণনাটি করছি। আমি কেবল কয়েকটি জায়গায় পরীক্ষা করে দেখেছি তবে এটি একটি ভাল জায়গার মতো দেখাচ্ছে।
রব ড্রিমি

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