2012-06-26 15 views
8

क्या UITextField के लिए प्रदर्शित कीबोर्ड पर रद्द बटन जोड़ने का कोई तरीका है? UITextInputTraits प्रोटोकॉल संदर्भ को देखकर, मुझे विभिन्न कीबोर्ड प्रकारों को आजमाने सहित कुछ भी नहीं मिला।UITextField कीबोर्ड को रद्द करें बटन जोड़ना

उत्तर

14

आप इनपुट एक्सेसरी व्यू बना सकते हैं जो कीबोर्ड के ऊपर UIToolBar प्रदर्शित कर सकता है और फिर इसमें एक रद्द बटन जोड़ सकता है। InputAccessoryView प्रॉपर्टी के लिए नीचे दिए गए दस्तावेज़ लिंक पर नज़र डालें।

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextField_Class/Reference/UITextField.html

यह एक मैं एक TextView के लिए किया था का एक उदाहरण है। निर्माण इनपुट एक्सेसरी व्यू विधि को "textViewDidBeginEditing" से बुलाया जाता है। फिर यह इनपुट एक्सेसरी व्यू बनाता है और मेरे मामले में तीन बटन और एक स्पेस बार जोड़ता है।

मुझे उम्मीद है कि इससे मदद मिलती है।

-(void)textViewDidBeginEditing:(UITextView *)textView { 

[self createInputAccessoryView]; 
[textView setInputAccessoryView:_inputAccessoryView]; 
self.myTextView = textView; } 

-(void)createInputAccessoryView { 

_inputAccessoryView = [[UIToolbar alloc] init]; 
_inputAccessoryView.barStyle = UIBarStyleBlackOpaque; 
[_inputAccessoryView sizeToFit]; 

_inputAccessoryView.frame = CGRectMake(0,_collageView.frame.size.height - 44, _collageView.frame.size.width, 44); 

UIBarButtonItem *fontItem = [[UIBarButtonItem alloc] initWithTitle:@"Font" 
                  style:UIBarButtonItemStyleBordered 
                  target:self action:@selector(changeFont:)]; 
UIBarButtonItem *removeItem = [[UIBarButtonItem alloc] initWithTitle:@"Remove" 
                  style:UIBarButtonItemStyleBordered 
                  target:self action:@selector(removeTextView:)]; 
//Use this to put space in between your toolbox buttons 
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                      target:nil 
                      action:nil]; 
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                  style:UIBarButtonItemStyleDone 
                  target:self action:@selector(dismissKeyBoard:)]; 

NSArray *items = [NSArray arrayWithObjects:fontItem,removeItem,flexItem,doneItem, nil]; 
[_inputAccessoryView setItems:items animated:YES]; 
[_myTextView addSubview:_inputAccessoryView]; 
} 
+0

इसके लिए धन्यवाद, हालांकि अगर आप केवल रद्द बटन कर रहे थे, तो 'यूआईटीएक्स्टफिल्ड' के बगल में एक रद्द 'UIBarButtonItem' को एक एक्सेसरी व्यू के बिना एक ही चीज़ को पूरा नहीं करेगा? –

+0

इसके बारे में सोचने के लिए आओ, यही वही है जो मैं करूँगा। यह वास्तव में एक अच्छा जवाब है हालांकि यह निश्चित रूप से मेरे मुद्दे को हल करता है, इसे स्वीकार किए जाने के रूप में चिह्नित करेगा। –

+0

@kevinhorgan क्यों आपने इनपुट संपत्ति में self.myTextView को तुरंत सौंपा नहीं है? – Camus

0

एंड्रयू, यह कैसा चल रहा है? यह दीमा आर है!

जहाँ तक मुझे पता है, ऐसा करने का कोई शानदार तरीका नहीं है जिसे आप करने का प्रयास कर रहे हैं। आप आसानी से प्रकार में बनाया में से एक है कि सूचीबद्ध हैं से चुन सकते हैं here

typedef enum { 
    UIReturnKeyDefault, 
    UIReturnKeyGo, 
    UIReturnKeyGoogle, 
    UIReturnKeyJoin, 
    UIReturnKeyNext, 
    UIReturnKeyRoute, 
    UIReturnKeySearch, 
    UIReturnKeySend, 
    UIReturnKeyYahoo, 
    UIReturnKeyDone, 
    UIReturnKeyEmergencyCall, 
} UIReturnKeyType; 

आप या तो कुंजीपटल है कि अपने को रद्द बटन होता है के शीर्ष पर एक दृश्य जोड़ने, या देखने पदानुक्रम के माध्यम से पार करने के लिए कोशिश कर रहा है कर सकता है क्या और जिस तरह से आप बटन पर चाहते हैं उसे ओवरले करें (हालांकि यह विधि अविश्वसनीय है)। दुर्भाग्यवश, यह एक बात है कि ऐप्पल ने अभी तक अधिक अनुकूलन प्रदान नहीं किया है।

संपादित करें: वास्तव में मुझे लगता है कि मैंने शुरुआत से आपके प्रश्न को गलत तरीके से पढ़ा है, क्योंकि आप मुख्य वापसी बटन के रूप में रद्द बटन नहीं चाहते हैं। इस मामले में, इनपुट एक्सेसरी व्यू निश्चित रूप से जाने का तरीका है।

+1

व्हाउ क्या फेंकता है, आपको यहां दोस्त को देखने के लिए अच्छा लगा। और उत्तर के लिए धन्यवाद। हाँ, यदि मैं टेक्स्ट इनपुट रद्द करना चाहता हूं, तो मैं उपयोगकर्ता को एक अतिरिक्त रद्द बटन देना चाहता हूं। –

+1

केविन हॉर्गन का जवाब वह है जिसे आप चाहते हैं, यह हासिल करने का सही तरीका है। – Dima

1

मैं बस इंटरफ़ेस बिल्डर में मेरे विचार नियंत्रक में एक UIToolbar गिरा दिया है, तो:

@property IBOutlet UIToolbar *keyboardAccessory; 

-(void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    // this is so I can edit it in Interface Builder, but it doesn't show in the view 
    [keyboardAccessory removeFromSuperview]; 
} 

-(BOOL) textFieldShouldBeginEditing:(UITextField*)textField { 
    textField.inputAccessoryView = keyboardAccessory; 
    return YES; 
} 

-(IBAction) pressedCancelButton { 
    [self.view endEditing:YES]; 
} 

देखा!