我有一个应用程序,其中列出了下面列出的代码,可以显示最终用户的随机问题。我试图弄清楚如何让用户能够在随机显示的数组中向后导航。例如,用户正在经历问题并意外地推进过去并想要返回,我希望他们能够只是简单地按下后退按钮。你能提供一些如何做到这一点的指导吗?非常感谢!!!
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
myArray5= [NSArray arrayWithObjects:
@"Question 1",
@"Question 2",
@"Question 3",
@"Question 4",
nil];
int chosen = arc4random() % [myArray5 count];
NSString *item = [myArray5 objectAtIndex: chosen];
label3.text = [NSString stringWithFormat: @"%@", item];
label3.alpha = 0;
label3.transform = CGAffineTransformIdentity;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
label3.alpha = 1;
label3.transform = CGAffineTransformMakeScale(1, 1);
[UIView commitAnimations];
UITouch *touch = [[event allTouches] anyObject];
if (touch.tapCount == 2) {
}
}
答案 0 :(得分:0)
当然,您可以创建一个NSMutableArray,它可以保护随机选择的问题的索引(选择的int)。您还可以查看UINavigationController,它提供了在一系列视图中向后导航的方法。 最后,您应该考虑封装您的问题逻辑。看起来您在一个类中同时拥有接口的代码和问题的代码。一旦你的应用程序变大,你就会遇到这种方法的问题。看看Model-View-Controllers.
的概念答案 1 :(得分:0)
一种可能性是预先计算应用初始化时用户将被问到的问题的缺陷。然而,这意味着你会问的问题数量会有一个硬编码限制,或者如果你到达数组的末尾就会回到起点。我不熟悉Objective-C所以请耐心等待
const int NUM_QUEsTIONS = 1000; // Arbitrary number
int questions[NUM_QUESTIONS];
init()
{
for (int i = 0; i < NUM_QUESTIONS; ++i)
{
questions[i] = RandomNumber();
}
}
然后在你的事件处理程序中,你只需将一个计数器递增到这个数组中并提出这个问题。
对于无限问题,您应该使用双向链表。
答案 2 :(得分:0)
一些想法:
创意1.将所选问题的ID存储在一个额外的数组中。
创意2.随机化数组,然后逐步完成。
想法3.如果你想避免两次使用问题,你可以
有点像这样:
NSMutableArray *array = [NSMutableArray arrayWithObjects: @"a", @"b", @"c", @"d", @"e", @"f", nil];
NSInteger maxIndex = [array count]-1;
do {
NSInteger randomIndex = arc4random() % (maxIndex+1);
NSLog(@"%@", [array objectAtIndex:randomIndex]);
[array exchangeObjectAtIndex:randomIndex withObjectAtIndex:maxIndex];
maxIndex--;
} while (maxIndex > -1);