Iphone 按下识别选项卡按钮以移动到下一个响应者

Iphone 按下识别选项卡按钮以移动到下一个响应者,iphone,ios,ipad,uicontrol,uiresponder,Iphone,Ios,Ipad,Uicontrol,Uiresponder,我有一个自定义类的多个实例,该类从键盘获取输入。您可以想到UITextField(但它们不是UITextField,而是NSObject)。但是,它们都有一个属性UIControl*控件 这些对象被实例化并放入一个数组(顺序很重要),它们以相同的顺序放在屏幕上 场景1:用户选项卡在第一个对象上,它将成为第一个响应者。用户点击另一个对象(来自同一个类)并成为第一个响应者。没问题 场景2:用户选项卡在第一个对象上,它将成为第一个响应者。用户点击键盘(iPad或iPhone或无线键盘)的选项卡按钮,我

我有一个自定义类的多个实例,该类从键盘获取输入。您可以想到
UITextField
(但它们不是
UITextField
,而是
NSObject
)。但是,它们都有一个属性
UIControl*控件

这些对象被实例化并放入一个数组(顺序很重要),它们以相同的顺序放在屏幕上

场景1:用户选项卡在第一个对象上,它将成为第一个响应者。用户点击另一个对象(来自同一个类)并成为第一个响应者。没问题

场景2:用户选项卡在第一个对象上,它将成为第一个响应者。用户点击键盘(iPad或iPhone或无线键盘)的
选项卡
按钮,我希望阵列中的下一个对象成为下一个响应者。iOS随机选择另一个与我想要的顺序不一致的对象[?或者我不清楚的逻辑]

问题:因为这些对象是
NSObject
s,我如何拦截到下一个对象的转换。我试着使用标签或跟踪谁是第一响应者,但问题是,如果用户按了一个无序的对象,这很好-我不想拦截。我只想截获从一个对象到另一个对象的过渡,只要它是通过点击键盘的
选项卡
(或
下一步
返回
)按钮


有什么想法吗?谢谢。

您可以将自定义类设置为具有以下内容

@interface testClassButtonSub : UIButton

@property (weak,nonatomic) IBOutlet UIButton *nextButton;

@end
然后,您甚至可以使用interface builder设置在执行某个操作时,下一个响应程序将是哪个。(用户在自定义类的textfield中按下return键)

对于返回,您必须将viewcontroller声明为特定textview的委托

首先,按如下方式设置viewcontroller标题:

@interface RegisterViewController : UIViewController <UITextFieldDelegate>
然后使用此委托方法跳转到下一个对象

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{    
    // Jumping code here
    return NO;
}
但是在本例中,文本字段必须位于对象内部,因此必须将该对象作为委托,并在该对象的实现中添加跳转代码

[thisObjectsTextfield becomeFirstResponder];

您可以将自定义类设置为具有以下内容

@interface testClassButtonSub : UIButton

@property (weak,nonatomic) IBOutlet UIButton *nextButton;

@end
然后,您甚至可以使用interface builder设置在执行某个操作时,下一个响应程序将是哪个。(用户在自定义类的textfield中按下return键)

对于返回,您必须将viewcontroller声明为特定textview的委托

首先,按如下方式设置viewcontroller标题:

@interface RegisterViewController : UIViewController <UITextFieldDelegate>
然后使用此委托方法跳转到下一个对象

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{    
    // Jumping code here
    return NO;
}
但是在本例中,文本字段必须位于对象内部,因此必须将该对象作为委托,并在该对象的实现中添加跳转代码

[thisObjectsTextfield becomeFirstResponder];

为什么不在自定义类中创建一个属性,指向它应该指向的下一个对象(带有弱引用),然后在按下tab/return时自动将该对象作为第一个响应者,如果没有对象(像最后一个),则不会发生任何事情,因为它将是发送给nil的消息。我认为您甚至可以使用interface builder来设置此自定义属性。(再说一遍,我可能不理解你的问题)@LuisOscar谢谢。这是一个我没有想到的选项,但仍然存在障碍:1)我最大的问题是当按下键盘上的TAB按钮时,我什么也看不到。我怎么能得到这个?iOS将输入路由到其他地方,而不是我的对象。2) 我宁愿这些对象彼此都不了解——即使有一个弱引用。虽然如果我发现这是唯一的选择,但我可以忽略这一点。你使用的是界面生成器吗?你说它们不是uitextfield,但它们必须是,或者你必须在某个地方有一个uitextfield来显示键盘(可能是它们的一个子类),你到底把它们指定为什么?(就像你的自定义子类中可能有一个uitextfield,那么这个就是第一个响应者)关于返回,我将粘贴代码作为答案,因为它在这里看起来很有趣(顺便说一句,TAB是指TAB?我从未使用过键盘,但在iOS环境中它不算是返回吗?)为什么不在自定义类中创建一个属性,指向它应该指向的下一个对象(带有弱引用),然后在按下tab/return时自动将该对象作为第一个响应者,如果没有对象(像最后一个),则不会发生任何事情,因为它将是发送给nil的消息。我认为您甚至可以使用interface builder来设置此自定义属性。(再说一遍,我可能不理解你的问题)@LuisOscar谢谢。这是一个我没有想到的选项,但仍然存在障碍:1)我最大的问题是当按下键盘上的TAB按钮时,我什么也看不到。我怎么能得到这个?iOS将输入路由到其他地方,而不是我的对象。2) 我宁愿这些对象彼此都不了解——即使有一个弱引用。虽然如果我发现这是唯一的选择,但我可以忽略这一点。你使用的是界面生成器吗?你说它们不是uitextfield,但它们必须是,或者你必须在某个地方有一个uitextfield来显示键盘(可能是它们的一个子类),你到底把它们指定为什么?(就像你的自定义子类中可能有一个uitextfield,那么这个就是第一个响应者)关于返回,我将粘贴代码作为答案,因为它在这里看起来很有趣(顺便说一句,TAB是指TAB?我从未使用过键盘,但在iOS环境中它不算是返回吗?)谢谢你的回答,但是没有UITextField。该类符合UIKeyInput协议。我在UIKeyInput协议的-(void)insertText:(NSString*)文本必需方法中找到了答案。现在我需要想出一个设计来