假设您有 9 个UIButtons,然后考虑 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 等)。
更新(评论后):
我能够在 storyboard 中使用包含几个按钮的 nib 文件和 UITextField 重新创建它。
流程如下:
1.创建一个包含所有按钮的笔尖(您已经完成了)。
2. 创建视图;并在“自定义类”下,将类重命名为此视图(即“自定义类”->“类”->“view-that-holds-the-buttons”)。
3. 如上所述,将IBActions(总共 9 个对应于您的按钮数量)连接到一个 single 方法。
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 的实现方式如下:
@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
}
在您加载nib 文件的控制器中声明delegate:
weak var delegate : keypadProtocol?
从加载nib的视图控制器中分配delegate:
keyPadView.delegate = self //keyPadView is the nib file loaded
回复您的第二条评论:
假设:
我们有 2 个班级。
第一个是UIView 的子类,即xib,它包含按钮。
我们称之为“KeypadView”。
第二个是主视图控制器,它与持有的控制器相关联
故事板中的UITextField。
我们称之为“MainViewController”。
第 2 步:
首先,请创建一个新的UIView,并将其命名为“KeypadView”。
然后,单击您的 .xib 文件;在右侧面板上,单击左侧第三个选项卡,称为“Identity Inspector”;您会看到“Custom Class -> Class”,您可以在其中将此 xib 与您创建的类相关联(您需要这个类,以便连接 @ 987654365@ 用于从 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)中显示击键。