gpt4 book ai didi

ios - 有没有办法在倒数计时器中使用 UIButton 作为文本?

转载 作者:行者123 更新时间:2023-11-28 18:57:48 25 4
gpt4 key购买 nike

我是 iOS 开发的新手,我正在编写一个具有倒数计时器的应用程序。我希望用户能够点击时间来设置它,所以我使用了 UIButton,因为这似乎是最简单的事情。我在该网站上看到过有关使用“UILabel”作为计时器以及使用点击手势来检测用户触摸“UILabel”的问题,但似乎大多数人都建议使用 UIButton

我遇到的问题是我将 UIButton 文本初始化为 00:00,然后在用户选择时间时更改它。计时器设置为每 0.25 秒关闭一次(重复),处理程序会在每次检测到时间至少更改 1 秒时更新按钮中的文本。

我遇到的问题是,在 UIButton 文本更新之间,UIButton 文本恢复到 00:00。例如,如果计时器设置为 10 分钟 (10:00),则 UIButton 文本会执行以下操作:10:00(开始)

00:00(大约 0.5 秒)

09:59(1 秒后)

00:00(约 1.5 秒后)

等等

如果我使用 UILabel,则不会发生这种情况。以这种方式使用 UIButton 有什么本质上的错误吗?我应该只使用 UILabel 并弄清楚如何做点击手势吗?任何帮助将不胜感激!

这是我更新 UIButton 文本的代码(我正在使用通知事件):

- (void)timerChangedNotification:(NSNotification *)notification
{
Timer *timer = (Timer *) notification.object;

if ([[notification name] isEqualToString:@kGameClockTimer]) {
NSInteger timeInMinutes = (timer.currentTimeInSeconds / 60) % 60;
NSInteger timeInSeconds = timer.currentTimeInSeconds % 60;

if ((self.lastTimeInMinutes != timeInMinutes) || (self.lastTimeInSeconds != timeInSeconds)) {
self.lastTimeInMinutes = timeInMinutes;
self.lastTimeInSeconds = timeInSeconds;
// this label is to see if the same behavior happens using a label
self.timerLabel.text = [NSString stringWithFormat:@"%02ld:%02ld",
(long)timeInMinutes, timeInSeconds];
self.timerButton.titleLabel.text = [NSString stringWithFormat:@"%02ld:%02ld",
(long)timeInMinutes, timeInSeconds];
}
}
}

编辑:根据下面的一些评论,我在将“UIButton”设置为以下代码时更改了代码:

[self.timerButton setTitle:[NSString stringWithFormat:@"%02ld:%02ld", (long) timeInMinutes, (long) timeInSeconds] forState:UIControlStateNormal];

这确实让我更接近了,因为我没有在更新之间得到 00:00,但文本在更新之间仍然“闪烁”。我怀疑它与 forState 有关。我还需要为其他州设置标题吗?

编辑:好的,我通过“闪烁”按钮找到了解决问题的方法。我不得不补充:[UIView setAnimationsEnabled:NO]; 在我的代码中。

感谢大家的帮助!

最佳答案

您想使用一个按钮来呈现倒计时吗?

我觉得你可以用下面的方式。我试过了,它对我有用。

我有三个属性

@property(nonatomic,assign)NSInteger time;
@property (weak, nonatomic) IBOutlet UIButton *smsButton;
@property(nonatomic,strong)NSTimer *timer;

然后用一个方法启动定时器:

- (void)smsButtonPressed :(id)sender {

self.time = 60;
self.smsButton.enabled = NO;
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];

在 updateTime 方法中,你这样做:

- (void)updateTime {

if (self.time == 0) {

[self resetTimer];
}
[self.smsButton setTitle:[NSString stringWithFormat:@"%ld",self.time] forState:UIControlStateDisabled];
self.time --;

使用上面的方法,我想你可以实现你想要实现的。

希望这有帮助。 :)

关于ios - 有没有办法在倒数计时器中使用 UIButton 作为文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30472998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com