如何在iOS中显示大按钮而不单击按钮(单击该按钮周围的区域)

Posted

技术标签:

【中文标题】如何在iOS中显示大按钮而不单击按钮(单击该按钮周围的区域)【英文标题】:How to show big button without clicking button (clicking area around that button) in iOS 【发布时间】:2012-09-06 02:59:46 【问题描述】:

我为键盘做了很多按钮。当我单击一个按钮时,它显示为大按钮。不点击按钮,可以显示为大按钮吗?(如iPhone)你能给出一些示例代码吗?

就像你在这张图片中看到的(默认的),我只是点击附近/周围按钮,而不是直接点击按钮,但它在文本字段中显示字母!如何设置按钮周围区域的条件?

【问题讨论】:

我不确定我理解你在做什么,请添加一些图片和更好的描述。 你能澄清一下吗?你说的是文本键盘吗? 上图中可以看到,我不直接点击! 除了UIControlStateTouchUpInside、UIControlStateTouchDown,我们还能用什么来了解触控区域? 【参考方案1】:

您是指在突出显示的按钮(如键盘)上方显示按钮的较大图像吗?

如果是这样,我会考虑为 UIControlStateTouchDown 设置一个操作,以查看您的按钮何时突出显示,并最终在按下的按钮上方添加更大的按钮图像。然后,为 UIControlStateTouchUpInside、UIControlStateTouchUpOutside 和 UIControlStateTouchCancel 添加一个操作,以删除较大的按钮图像。

要跟踪较大的按钮图像,您可以使用属性并对其进行跟踪。我建议将 UIButton 子类化,我假设您将其用于您的按钮,并为其较大的按钮图像添加一个属性,以便较大的按钮图像与其上方的按钮相关联。

【讨论】:

你有什么不清楚的地方?我怀疑如果我提供代码,您是否会更清楚。【参考方案2】:

您的帖子不是很清楚,但我相信您正在尝试复制 UIKeyboard 的按钮缩放功能。

如果是这种情况,那么这里有几个简单的步骤来实现这一点。

为按钮添加自定义操作,用于控制状态“向上触摸”和“向下触摸”。 我可能会在viewDidAppear 中执行此操作,这样您就不会阻塞运行循环,直到一切都完成移动到位。也许稍微延迟执行此操作甚至可能是有益的。如下所示在循环中执行此操作将允许您自动将这些操作添加到主视图的子视图数组中“UIButton”类的每个对象。

    for (UIButton *button in self.view.subviews) 
    if ([button isKindOfClass:[UIButton class]]) 
        [button addTarget:self action:@selector(anyButtonDown:) forControlEvents:UIControlEventTouchDown];
        [button addTarget:self action:@selector(anyButtonUp:) forControlEvents:UIControlEventTouchUpInside];
    

我们将使用 touch down 方法来缩放按钮,并在内部进行 touch up 以将按钮返回到其原始状态,然后将按钮文本值附加到文本字段的末尾。

为了这个例子,我使用了UILabel

注意这些方法,我们使用UIButton 作为参数,以便可以转换调用此操作的按钮的转换,而无需为每个按钮创建操作。

- (void)anyButtonDown:(UIButton *)sender

    [self.view bringSubviewToFront:sender];
    [UIView animateWithDuration:0.1 animations:^
        [sender setTransform:CGAffineTransformConcat(CGAffineTransformMakeScale(1.3, 1.3), CGAffineTransformMakeTranslation(0, -25))];
    ];

在这里,我们将“发送者”的变换调整为释放按钮时的原始变换。此动画是使用完成处理程序创建的,当按钮完成动画返回其原始状态时,允许为该按钮指定的文本附加到当前位于标签中的文本的末尾。

注意:为此,我假设您已输入按钮所代表的字母为按钮的textLabel

- (void)anyButtonUp:(UIButton *)sender

    [UIView animateWithDuration:0.1 animations:^
        [sender setTransform:CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, 1.0), CGAffineTransformMakeTranslation(0, 0))];
    completion:^(BOOL done)
        [textLabel setText:[textLabel.text stringByAppendingString:sender.titleLabel.text]];
    ];

【讨论】:

对于默认键盘,如何禁用按键(不显示在大按钮中)?

以上是关于如何在iOS中显示大按钮而不单击按钮(单击该按钮周围的区域)的主要内容,如果未能解决你的问题,请参考以下文章

c#如何单击按钮显示另一个窗体

单击后退按钮iOS 6时如何继续播放音频

在 iOS 中单击按钮时,如何在视图控制器顶部显示视图?

通过单击按钮显示消息,但我如何通过单击按钮隐藏此消息

如何仅在JavaScript中单击按钮时执行操作

如何在 iOS 模拟器中单击主页按钮?