假设您有 9UIButton秒,然后考虑+从情节提要中的所有这些按钮中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我能够使用包含几个按钮和UITextFieldin storyboard的文件重新创建它。
该过程如下进行:
1.创建一个包含所有按钮的笔尖(您已经完成了)。
2.创建视图;并在“自定义类”下,将类重命名为此视图(即,“自定义类”->“类”->“view-that-holds-the-buttons”)。
3.如上所述,将IBActions(总共 9 个对应于按钮的数量)连接到一个方法。
4.在您的另一个视图控制器中UITextField,使用您现有的方法加载 nib。
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将按如下方式实施:
@IBAction func tapped(sender: AnyObject)
{
delegate!.displayKeys(sender)
}
displayKeys将执行如下:
func displayKeys(keystrokeObject: AnyObject)
{
textView.text = NSString(format: "%@%li", textView.text! ?? "", (keystrokeObject as! UIButton).tag) as String
}
在加载文件delegate的控制器中声明:nib
weak var delegate : keypadProtocol?
delegate在加载的视图控制器中分配from nib:
keyPadView.delegate = self //keyPadView is the nib file loaded
回复您的第二条评论:
假设:
我们有 2 节课。
第一个是 的子类UIView,它是xib,它包含按钮。我们称之为“KeypadView”。
第二个是主视图控制器,它与保存UITextField故事板的控制器相关联。我们称之为“MainViewController”。
第2步:
首先,请创建一个新UIView名称并将其命名为“KeypadView”,以保持一致性。
然后,单击您的 .xib 文件;在右侧面板上,单击左侧第三个选项卡,称为“<strong> Identity Inspector ”;您会看到“<strong> Custom Class -> Class ”,您可以在其中将其与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从每个按钮调用的:
IE,
@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)中显示击键。