假设您有 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
我能够使用包含几个按钮和UITextField
in storyboard的文件重新创建它。
该过程如下进行:
1.创建一个包含所有按钮的笔尖(您已经完成了)。
2.创建视图;并在“自定义类”下,将类重命名为此视图(即,“自定义类”->“类”->“view-that-holds-the-buttons”)。
3.如上所述,将IBAction
s(总共 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
)中显示击键。