2016-02-20 35 views
2

我試圖加載一個.xib文件作爲一個自定義鍵盤,當一個textField被點擊時。我可以在點擊textField時顯示.xib文件(查看),但我不確定如何使中的文本字段與.xib文件中的按鈕進行通信。當UITextField被挖掘時加載一個筆尖文件作爲一個自定義鍵盤

這是我迄今爲止所做的。

  1. 創建單個項目。

  2. 增加了一個UITextField併爲它創建了一個出口。

    @IBOutlet weak var myField: MyTextField! 
    
  3. 創建一個新的文件.xib並稱之爲CustomView.xib

  4. 創建了一個新類並將其命名爲CustomView.swift

  5. 指定的類CustomView.swiftCustomView.xib文件。

  6. CustomView.xib文件中增加了一些UIButtons。這些將作爲自定義鍵盤,當調用resignFirstResponder方法時,它們將顯示何時觸摸textField並隱藏。

  7. ViewController.swiftviewDidLoad方法中,我如下分配inputView

    import UIKit 
    
    class ViewController: UIViewController { 
    
        @IBOutlet weak var myField: MyTextField! 
    
        override func viewDidLoad() { 
        super.viewDidLoad() 
        // Do any additional setup after loading the view, typically from a nib. 
        let myView = NSBundle.mainBundle().loadNibNamed("CustomView", owner: self, options: nil).first as? CustomView 
        myField.inputView = myView 
        } 
    } 
    
  8. 完成

當我運行應用程序並點擊文本字段中的.xib文件顯示(見下圖),我的問題是,我怎麼溝通的按鈕與文本框在ViewController.swif。換句話說,我想要的是當它們被點擊時在inputField中顯示數字。

有什麼建議嗎?這是通常如何做到的。

這是一個圖像,顯示當inputField被點擊時顯示的視圖。

enter image description here

回答

1

比方說,你有9個UIButton S,然後再考慮CTRL +拖動從腳本的所有這些按鈕的IBAction的方法,如:

- (IBAction)tapped:(id)sender 
{ 
    textView.text = [NSString stringWithFormat:@"%@%li", textView.text, (long)((UIButton*)sender).tag]; 
    NSLog(@"%@", textView.text); 
} 

因爲textField是您的文本字段,然後您可以使用這些按鈕的tag屬性從鍵盤(即按鈕)追加每個相應的數字,上述方法。

您可以爲故事板中的每個單獨按鈕設置標籤編號(即分別爲1 - 9)。

我沒有使用9個按鈕進行測試,而是僅使用2個,每個按鈕分別使用標籤編號1和2。結果在UITextField(即,1,12,122等等)中顯示得很好。

更新(後評論):

我能夠使用nib文件,其中包含幾個按鈕和UITextField故事板重新創建此。

的過程如下:

與所有的按鈕(你已經完成)創建一個筆尖。

2.創建視圖;並在「自定義類」下,將該類重新命名爲該視圖(即,「自定義類」 - >「類」 - >「查看 - 保存 - 按鈕」)。

3.電線的IBAction秒(總共9對應於您的按鈕的數目)與一個單一方法如上所述。

4.在您的其他視圖控制器的視圖保存UITextField,使用您現有的方法加載筆尖。

5.添加此視圖(從nib)作爲子視圖。

與視圖之間的通信下面關注(保持所述按鈕與所述IBAction方法一起)和在其中加載nib控制器:

6.創建delegateweak)屬性。

7.在添加視圖(從nib),分配該delegate與視圖控制器(即加載nib控制)。

8.創建一個協議:

例如:

protocol keypadProtocol : class 
{ 
    func displayKeys(keystrokeObject: AnyObject) 
} 

具有加載nib符合此協議和實現所要求的方法(displayKeys)視圖控制器:

//The one that loads the nib, which also holds the UITextField 
class mainViewController: UIViewController, keypadProtocol 

所以,一旦按鈕被點擊,IBAction將被稱爲;但我們沒有顯示它,而是將sender發送到我們的delegate,這是實現displayKeys方法並擁有UITextField的視圖控制器。

@IBAction func tapped(sender: AnyObject) 
{ 
    delegate!.displayKeys(sender) 
} 

displayKeys會像下面這樣來實現:在控制器中delegate

func displayKeys(keystrokeObject: AnyObject) 
{ 
    textView.text = NSString(format: "%@%li", textView.text! ?? "", (keystrokeObject as! UIButton).tag) as String 
} 

宣言在這裏裝載nib文件:

IBAction將實現如下

weak var delegate : keypadProtocol? 

從視圖控制器內分配的delegate在這裏裝載nib

keyPadView.delegate = self //keyPadView is the nib file loaded 

在回答你的第二個評論:

假設:

我們有2個班。

第一個是UIView的子類,它是xib,它包含按鈕。我們稱之爲「KeypadView」。

第二個是主視圖控制器,它與控制器相關聯,該控制器在故事板中包含 UITextField。我們稱之爲「MainViewController」。

第2步:

首先,請創建一個新的UIView並將其命名爲一致性,「KeypadView」着想。
然後,點擊你的.xib文件;在右側面板上,點擊左側第三個標籤,即「Identity Inspector」;您將看到「自定義類 - >」,在這裏你將這個xib關聯到你創建的類(你需要這個類,以便將IBAction的按鈕從xib文件連接到它)。這將是「KeypadView」,它是UIView的一個子類。

步驟6:

您在保存按鈕類(「KeypadView」)宣佈這一點。

步驟8:

您連接此方法(IBAction)上述類(即,「KeypadView」)。

一旦你從「mainViewController」內加載xib(「KeypadView」),在「KeypadView」設置delegateselfself是「MainViewController」):

let keyPadView = NSBundle.mainBundle().loadNibNamed("CustomView", owner: self, options: nil).first as? KeyPadView 

keyPadView.delegate = self 
self.view.addSubview(keypadView) 

//you may need to re-adjust the position of the views; I will leave that to you 

在你的「KeyPadView 「一流的,應該有一個IBAction是會從每個按鈕的叫:

也就是說,

@IBAction func tapped(sender: AnyObject) 
{ 
    delegate!.displayKeys(sender) 
} 

我們的delegate是「mainViewController」,如果你還記得。

由於displayKeys在「mainViewController」實現,下面的方法將被稱爲在其中:

func displayKeys(keystrokeObject: AnyObject) 
{ 
    textView.text = NSString(format: "%@%li", textView.text! ?? "", (keystrokeObject as! UIButton).tag) as String 
} 

「mainViewController」將隨後在顯示擊鍵其UITextField(即,textView)。

+0

我知道如何顯示從uibutton到文本框的值,我的問題是按鈕在.xib文件中,並且文本框位於主故事板中。謝謝 –

+0

對不起,我刪除了我以前的帖子,因爲我知道了。非常感謝你的幫助。 –

相關問題