我有一个简单的幻灯片应用程序,以5秒的间隔显示图像。按下按钮可以按1-5的等级评定图像,评级存储在NSMutableArray
(称为“额定”)。此时,每个按钮都使用switch
语句存储在数组中。
- (IBAction)setRating:(id)sender
{
UIButton *button = (UIButton *) sender;
int bTag = button.tag;
rating = [NSString stringWithFormat:@"%d", bTag];
_ratingChoice.text = rating;
// Determine which button was pressed, add to array
switch (button.tag)
{
case 1:
[self.rated addObject:rating];
NSLog(@"Rating 1 button pressed");
break;
...
case 5:
[self.rated addObject:rating];
NSLog(@"Rating 5 button pressed");
break;
}
如果在下一个图像显示之前5秒钟没有点击按钮,我需要以某种方式在数组中插入“Null”值。
我曾试图使用NSTimer
,但似乎无法弄明白。我在按钮方法中包含了下面的代码,但它没有做任何事情。
(我是通过不按任何按钮测试它,希望在5秒后将“Null”添加到数组中)。
我在头文件中声明了NSTimer *clickTime;
。
_clickTime = [NSTimer scheduledTimerWithTimeInterval:5 target:self
selector:@selector(ratingClicked:) userInfo:nil repeats:NO];
}
-(void)ratingClicked:(NSTimer*)clickTime
{
[self.rated addObject:@"Null"];
NSLog(@"Null added to array");
NSLog(@"%@", self.rated);
}
另一个问题是,每个图像上可以多次按下任何按钮,从而导致向阵列添加更多值。我需要以某种方式限制每个图像的一个按钮点击。
我应该以某种方式实现允许每5秒点击一次按钮的方法吗?
我是否需要将我的数组更改为addObject:atIndex:
作为我的两个问题的解决方案?谢谢!
答案 0 :(得分:0)
你可以尝试这个我能够对按下的按钮做不同的动作:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self setTimer];
}
//--> set your timer
-(void)setTimer
{
self.mTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self
selector:@selector(btnNotPushed) userInfo:nil repeats:NO];
}
-(void)btnNotPushed
{
//--> do your stuff on button not clicked
[self resetTimer];
[self setTimer];
}
-(void)resetTimer
{
[ self.mTimer invalidate];
self.mTimer = nil;
}
//--> your method on button tap;
-(IBAction)pushClicked:(id)sender
{
[self resetTimer];
[self setTimer];
//-->do your stuff on button clicked;
}
您将能够根据您的代码执行上述功能。
答案 1 :(得分:0)
在显示图像后立即添加此代码:
[self performSelector:@selector(ratingClicked:)
afterDelay:5.0];
我还建议您将ratingClicked:
方法的名称更改为ratingNotClicked
:
-(void)ratingNotClicked{
[self.rated addObject:@"Null"];
NSLog(@"Null added to array");
NSLog(@"%@", self.rated);
}
通过调用performSelector:withObject:afterDelay:当显示图像时,您要求程序在5秒后添加“null”值。
如果已按下其中一个评级按钮,则可以使用cancelPreviousPerformRequestsWithTarget取消performSelector:withObject:afterDelay:
请求:方法:
- (IBAction)setRating:(id)sender {
[self cancelPreviousPerformRequestsWithTarget:self
selector:@selector(ratingClicked:)];
UIButton *button = (UIButton *) sender;
int bTag = button.tag;
rating = [NSString stringWithFormat:@"%d", bTag];
_ratingChoice.text = rating;
// Determine which button was pressed, add to array
switch (button.tag) {
case 1:
[self.rated addObject:rating];
NSLog(@"Rating 1 button pressed");
break;
...
case 5:
[self.rated addObject:rating];
NSLog(@"Rating 5 button pressed");
break;
}
答案 2 :(得分:0)
仅提供建议,使用such control代替按钮点击可以提供更好的用户体验,而且也很容易管理。