识别按下的标签按钮以移动到下一个响应者

Posted

技术标签:

【中文标题】识别按下的标签按钮以移动到下一个响应者【英文标题】:Recognize tab button pressed to move to next responder 【发布时间】:2012-11-21 01:33:39 【问题描述】:

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

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

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

场景 2: 用户点击第一个对象,它成为第一响应者。用户点击键盘(iPad 或 iPhone 或无线键盘)的TAB 按钮,我希望数组中的下一个对象成为下一个响应者ios 随机选择 [?或者有些逻辑我不清楚]另一个与我想要的顺序不同的对象。

问题:因为这些对象是NSObjects,如何截取到下一个对象的过渡。我尝试使用标签或跟踪谁是第一响应者,但问题是,如果用户无序地点击对象,那很好 - 我不想拦截它。我只想截取从一个对象到另一个对象的过渡只有在它是通过点击键盘的TAB(或NextReturn)按钮。

有什么想法吗?谢谢。

【问题讨论】:

为什么不在您的自定义类中创建一个属性,该属性指向它应该转到的下一个对象(使用弱引用),然后在按下制表符/返回时自动将该对象设为第一响应者,如果没有对象(如最后一个),则不会发生任何事情,因为它将是发送给 nil 的消息。我认为您甚至可以使用界面生成器来设置此自定义属性。 (再说一次,我可能不理解你的问题) @LuisOscar 谢谢。这是一个我没有考虑过的选项,但仍然存在障碍:1)我最大的问题是按下键盘上的 TAB 按钮时我什么也得不到。我怎么能得到那个? iOS将输入路由到其他地方,而不是我的对象。 2)我宁愿这些对象对彼此一无所知——即使是弱引用。虽然如果我发现这是唯一的选择,我可以忽略它。 你在使用界面生成器吗?你说它们不是 uitextfield 但它们必须是,或者你必须在某个地方有一个 uitextfield 来显示键盘(可能是它们的子类)你究竟将它们指定为什么? (就像你的自定义子类中可能有一个 uitextfield,然后这个是第一个响应者)关于返回,我将代码粘贴为答案,因为这里看起来很有趣 (顺便提一下,TAB 是指tab?我没用过键盘,但在iOS 环境中不算作return 吧?) 【参考方案1】:

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

@interface testClassButtonSub : UIButton

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

@end

然后,您甚至可以使用界面构建器来设置执行某个操作时哪个将是下一个响应者。 (用户在自定义类的文本字段内按回车键)

对于返回,您必须将您的视图控制器声明为特定文本视图的委托。

首先你像这样设置视图控制器标题:

@interface RegisterViewController : UIViewController <UITextFieldDelegate>

然后你在实现中设置委托

// Set Delegates of the Text Fields
eMail.delegate = self;
userPassword.delegate = self;
userNickname.delegate = self;

你使用这个委托方法跳转到下一个对象

- (BOOL)textFieldShouldReturn:(UITextField *)textField
    
    // Jumping code here
    return NO;

但是在您的情况下,您的文本字段必须在您的对象内,因此您必须将该对象设为委托,并在该对象的实现跳转代码中添加

[thisObjectsTextfield becomeFirstResponder];

【讨论】:

感谢您的回答,但没有 UITextField。该类符合 UIKeyInput 协议。我在 - (void)insertText:(NSString *)text required method of UIKeyInput 协议中找到了我的答案。现在我需要想出一个设计来传达这一点。 试试这个***.com/questions/9592593/…

以上是关于识别按下的标签按钮以移动到下一个响应者的主要内容,如果未能解决你的问题,请参考以下文章

按钮没有响应

仅在特定屏幕中对物理后退按钮按下执行减速器操作以响应本机

在 IB 中的两个 nsbuttons 之间设置响应者链

从 iPad 屏幕移入后 UIButtons 无响应

如何在不抬起手指的情况下更改我按下的按钮? (在LibGDX中)

移动到表格单元格中的下一个文本字段