我希望 UITableViewCell 中的 UItextField 仅在单元格触摸时成为第一响应者

发布于 2024-11-19 08:02:13 字数 361 浏览 5 评论 0原文

这就是我想要实现的目标:

我希望 UITableViewCell 中的 UITextField 仅在单元格触摸时成为第一响应者。仅当我在方法中将文本字段设置为第一响应者时,我才希望文本字段成为第一响应者:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`

知道如何实现此目的吗?当直接触摸文本字段时,永远不会调用tableView:didSelectRowAtIndexPath:

提前致谢。

This is what I'm trying to achieve:

I want a UITextField that is in UITableViewCell to become first responder only when the cell touched. I would like the text field to become the first responder only when I set it to first responder in the method:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath`

Any idea how I can achieve this? When the textfield is touched directly, tableView:didSelectRowAtIndexPath: is never called.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

拿命拼未来 2024-11-26 08:02:13

我想,你有一个自定义的 UITableViewCell。这样你就可以有一个 UITextField 成员。正确的?

在自定义单元格类中,重写方法

- (void)setSelected:(BOOL)selectedAnimated:(BOOL)animated:

其中,如果 selected == YES,则将文本字段设置为第一个应答者。否则,请辞去第一响应者的职务。

I guess, u have a custom UITableViewCell. In that u could have a UITextField member. Right?

In the custom cell class, override the method,

- (void)setSelected:(BOOL)selected animated:(BOOL)animated:

In that , if selected == YES, then make the text field as first responder. Else , resign the first responder.

离旧人 2024-11-26 08:02:13

让一个对象作为 UITextField 的委托并实现 textFieldShouldBeginEditing:;如果尚未选择单元格,则返回NO。 (如果直接调用 becomeFirstResponder 绕过检查,您可能始终能够从此方法返回 NO。)

Let an object be the delegate of the UITextField and implement textFieldShouldBeginEditing:; return NO if the cell hasn't been selected. (You might be able to always return NO from this method, if calling becomeFirstResponder directly bypasses the check.)

她如夕阳 2024-11-26 08:02:13

为了让 textField 在选择 uitableviewcell 时成为第一响应者,请使用您的 textField 作为您的属性,并调用 [self. textField1成为FirstResponder];

注意:您将需要与UITableViewCells数量一样多的属性,因为每个单元格都有一个textField。

当触摸文本字段时,编译器不会知道相应的行已被选择。
为此,您需要使用 tags,例如 textField.tag == 0 表示第一个文本字段,textField.tag ==1 表示第二个 TextField 等等。在 textFieldDidBeginEditing 中,您应该检查标记,然后将该值与所选的相应行链接起来。

这些有道理吗? :)

For having the textField become the first responder when a uitableviewcell is selected, use your textField as your property, and call [self.textField1 becomeFirstResponder];

Note: You will need as many properties as your the number of UITableViewCells as each cell has a textField.

When a textField is touched, the compiler will not know that the corresponding row got selected.
For this you will need to use tags, such as textField.tag == 0 for the first textField, textField.tag ==1 for the second TextField and so on. And in the textFieldDidBeginEditing you should check for the tag, and then link that value with the corresponding row selected.

Did any of these make sense ? :)

丶情人眼里出诗心の 2024-11-26 08:02:13

首先,您需要一个自定义表格单元格,您自己的 UITableViewCell 子类。在该实现中,您需要实现 hitTest: 来确定触摸发生的位置。在该方法中,您可以确定触摸实际上是否在 UITextField 的矩形内,如果是,则使其成为第一响应者。下面是我为项目编写的一些代码的示例:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if (self.editing) {
        if ([nickname pointInside:[self convertPoint:point toView:nickname] withEvent:nil])
            return [nickname hitTest:[self convertPoint:point toView:nickname] withEvent:event];

        return [super hitTest:point withEvent:event];
    }

    return [self contentView];
}

在本例中,属性 nickname 是自定义 UITableViewCell 内的 UITextField。

self.editing 周围的条件可能与您的应用程序相关,也可能不相关。这里的想法是向您展示 hitTest: 通常如何使用。

First, you need a custom table cell, your own subclass of UITableViewCell. In that implementation, you need to implement hitTest: to determine where the touch occurred. In that method you can determine if the touch was in fact inside the rect of your UITextField, and if it was, make it the first responder. Here's an example from some code I wrote for a project:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if (self.editing) {
        if ([nickname pointInside:[self convertPoint:point toView:nickname] withEvent:nil])
            return [nickname hitTest:[self convertPoint:point toView:nickname] withEvent:event];

        return [super hitTest:point withEvent:event];
    }

    return [self contentView];
}

The attribute nickname, in this case, was a UITextField inside the custom UITableViewCell.

The condition around self.editing may or may not be relevant to your application. The idea here is show you how hitTest: might be used, in general.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文