比方說,你有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.創建delegate
(weak
)屬性。
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」設置delegate
到self
(self
是「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
)。
我知道如何顯示從uibutton到文本框的值,我的問題是按鈕在.xib文件中,並且文本框位於主故事板中。謝謝 –
對不起,我刪除了我以前的帖子,因爲我知道了。非常感謝你的幫助。 –