2009-09-24 9 views
6

क्या टेक्स्टव्यू के बिना एक आईफोन ऐप में कीबोर्ड लाने के लिए संभव है? या क्या मुझे अदृश्य पाठ्यदृश्य होना चाहिए?टेक्स्टव्यू के बिना आईफोन कीबोर्ड

यदि हां, तो आप प्रोग्रामिक रूप से टेक्स्टव्यू कैसे बनाते हैं और फिर कीबोर्ड को लाते हैं (उपयोगकर्ता को टेक्स्टव्यू टैप करने के बिना)? एकमात्र उदाहरण मैं इंटरफ़ेस बिल्डर का उपयोग कर सकता हूं ..

+0

यदि टेक्स्ट में प्रवेश करने के लिए कहीं भी नहीं है तो आप कीबोर्ड को 'लाना' क्यों चाहेंगे? –

+0

संभावित डुप्लिकेट [UITextField या UITextView के बिना UIKeyboard को कैसे खींचें?] (Http://stackoverflow.com/questions/1376120/how-to-pull-up-a-uikeyboard-without-a-uitextfield-or -uitextview) – JosephH

उत्तर

7

कीबोर्ड दिखाने के लिए एकमात्र (वैध) तरीका एक टेक्स्टफील्ड होना है जो पहले उत्तरदाता है। छुपा टेक्स्टफील्ड पर becomeFirstResponder पर कॉल करके आप इसे छुपा सकते हैं और प्रोग्रामेटिक रूप से इसे पहली प्रतिक्रिया दे सकते हैं।

आप (aRect मान और देखने के लिए मौजूद)

var textView = [[[UITextView alloc] initWithFrame:aRect] autorelease]; 
[view addSubview:textView]; 

[textView becomeFirstResponder]; 
1

कुछ इस तरह कर रही है जिस तरह से इस चीज से काम करता है द्वारा प्रोग्राम के रूप में एक UITextView बना सकते हैं के माध्यम से NSNotificationCenter प्रकाशित करें/सदस्यता लें मॉडल है। सबसे पहले आप addObserver:selector:name:object: उपयोग करने की आवश्यकता है, तो आप this कर कोशिश कर सकते हैं:

[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:NSTextDidBeginEditingNotification object:self]]; 

लेकिन मुझे यकीन है वाली सूचनाओं को आप प्राप्त होता है, या कीबोर्ड टाइपिंग चरित्र मूल्यों को प्राप्त करने के लिए, के लिए रजिस्टर करने की आवश्यकता होगी नहीं हूँ। शुभकामनाएं और खुश हैकिंग :)

+0

यह कीबोर्ड कैसे लाएगा? – klaaspieter

+0

मुझे यकीन नहीं है कि यह होगा, यह चाल – slf

+0

पोस्ट करने के लिए सही अधिसूचना ढूंढना है और अधिक कीबोर्ड अधिसूचना सामग्री http://www.iphonedevsdk.com/forum/iphone-sdk-development/6275-add-toolbar-top -keyboard.html – slf

2

कुछ और खुदाई के बाद, मुझे this मिला। यह अनौपचारिक है, लेकिन मुझे लगता है कि यह काम करता है।

protocol KeyboardInputControlDelegate: class { 
    func keyboardInputControl(keyboardInputControl:KeyboardInputControl, didPressKey key:Character) 
} 

class KeyboardInputControl: UIControl, UIKeyInput { 

    // MARK: - properties 

    weak var delegate: KeyboardInputControlDelegate? 

    // MARK: - init 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     addTarget(self, action: Selector("onTouchUpInside:"), forControlEvents: .TouchUpInside) 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    // MARK: - UIView 

    override func canBecomeFirstResponder() -> Bool { 
     return true 
    } 

    // MARK: - methods 

    dynamic private func onTouchUpInside(sender: KeyboardInputControl) { 
     becomeFirstResponder() 
    } 

    // MARK: - UIKeyInput 

    var text:String = "" 

    func hasText() -> Bool { 
     return text.isEmpty 
    } 

    func insertText(text: String) { 
     self.text = text 
     for ch in text { 
      delegate?.keyboardInputControl(self, didPressKey: ch) 
     } 
    } 

    func deleteBackward() { 
     if !text.isEmpty { 
      let newText = text[text.startIndex..<text.endIndex.predecessor()] 
      text = newText 
     } 
    } 
} 

उदाहरण उपयोग:

UIKeyboard *keyboard = [[[UIKeyboard alloc] initWithFrame: CGRectMake(0.0f, contentRect.size.height - 216.0f, contentRect.size.width, 216.0f)] autorelease]; 
     [keyboard setReturnKeyEnabled:NO]; 
     [keyboard setTapDelegate:editingTextView]; 
     [inputView addSubview:keyboard]; 
1

UIKeyInput अपने दोस्त है। लाल दृश्य टैप करें और Xcode कंसोल आउटपुट देखें:

class ViewController: UIViewController, KeyboardInputControlDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let kic = KeyboardInputControl(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
     kic.delegate = self 
     kic.backgroundColor = UIColor.redColor() 
     view.addSubview(kic) 
    } 

    func keyboardInputControl(keyboardInputControl: KeyboardInputControl, didPressKey key: Character) { 
     println("Did press: \(key)") 
    } 
} 
1

UIKeyInput समाधान की कुंजी है।

protocol KeyboardInputControlDelegate: class { 
    func keyboardInputControl(keyboardInputControl:KeyboardInputControl, didPressKey key:Character) 
} 

class KeyboardInputControl: UIControl, UIKeyInput { 

    // MARK: - properties 

    weak var delegate: KeyboardInputControlDelegate? 

    // MARK: - init 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     addTarget(self, action: Selector("onTouchUpInside:"), forControlEvents: .TouchUpInside) 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    // MARK: - UIView 

    override func canBecomeFirstResponder() -> Bool { 
     return true 
    } 

    // MARK: - methods 

    dynamic private func onTouchUpInside(sender: KeyboardInputControl) { 
     becomeFirstResponder() 
    } 

    // MARK: - UIKeyInput 

    var text:String = "" 

    func hasText() -> Bool { 
     return text.isEmpty 
    } 

    func insertText(text: String) { 
     self.text = text 
     for ch in text { 
      delegate?.keyboardInputControl(self, didPressKey: ch) 
     } 
    } 

    func deleteBackward() { 
     if !text.isEmpty { 
      let newText = text[text.startIndex..<text.endIndex.predecessor()] 
      text = newText 
     } 
    } 
} 

उदाहरण का उपयोग। लाल दृश्य टैप करें और एक्सकोड कंसोल आउटपुट देखें:

class ViewController: UIViewController, KeyboardInputControlDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let kic = KeyboardInputControl(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
     kic.delegate = self 
     kic.backgroundColor = UIColor.redColor() 
     view.addSubview(kic) 
    } 

    func keyboardInputControl(keyboardInputControl: KeyboardInputControl, didPressKey key: Character) { 
     println("Did press: \(key)") 
    } 
} 
संबंधित मुद्दे