【发布时间】:2012-02-15 18:58:43
【问题描述】:
我几乎是 Objective C 和 iOS Dev 的新手,我需要制作一个记录“路线”或“路径”的应用程序(如点锁保护应用程序)。所以我想在拖动时按下按钮,启用所有直接邻居(右、左、上、下)。我已经开始编码,但我不知道我是否在正确的方向和我怎样才能实现拖动按下,这样用户就不必按下每个按钮,而是用手指跟踪路径强>
viewController.m
(void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
for (int y=0; y < 9; y++) {
for (int x = 0; x < 9; x++) {
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(20 + 30 * x, 20 + 30 * y, 30, 30);
unsigned buttonNumber = y * 9 + x + 1;
button.tag = buttonNumber;
button.backgroundColor = [UIColor blackColor];
[button setTitle:[NSString stringWithFormat:@"%u", buttonNumber] forState:UIControlStateNormal];
[button setTitle:[NSString stringWithFormat:@"!"] forState:UIControlStateHighlighted];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview: button];
}
}
这段代码(改编自 Jorge 在我的另一篇文章中的代码)生成了一个带有唯一标签的 9x9 按钮网格。
以及相应的动作方法,
(void)buttonPressed:(UIButton *)button
if(first){
for (int y=0; y < 9; y++) {
for (int x = 0; x < 9; x++) {
unsigned buttonNumber = y * 9 + x + 1;
UIButton *auxButton = (UIButton *)[self.view viewWithTag:buttonNumber];
if ((auxButton.tag != (button.tag + 1)) || (auxButton.tag != (button.tag - 1)) || (buttonNumber != (button.tag + 9)) || (buttonNumber != (button.tag - 9)) || (buttonNumber != button.tag )){
auxButton.enabled = FALSE;
}
}
}else{
//not implemented yet
}
我在这里所做的是:最初所有按钮都是启用的,但是当按下第一个按钮时,它将禁用所有按钮,除了直接邻居 (l,r,u,d)。
我的 if(condition) 不适用于 OR 条件 (||),所以所有按钮都被禁用,但如果我只使用一个条件,比如 if(auxButton.tag != button.tag + 1),它就可以工作.
这里可能有什么问题? 如何实现通过触摸跟踪的路径按下它经过的所有按钮?
提前致谢!
【问题讨论】:
-
我不确定您所说的“我怎样才能实现通过触摸跟踪的路径按下它经过的所有按钮?”是什么意思?如果我下面的答案不是您想要的,您能否提供更多说明?
-
你好,我的意思是:我能做些什么,只用一根手指按下几个按钮,按下时它会在屏幕上移动。
-
你测试过我下面提供的解决方案吗?尝试 for 循环中的代码,以查看当您按下按钮(作为普通按钮)时是否启用/禁用了正确的按钮。如果它不起作用,请告诉我出了什么问题,也许我可以提供帮助。然后尝试通过 UIControlEventTouchDragInside、UIControlEventTouchDragEnter 或其他类似事件更改 UIControlEventTouchUpInside。
-
是的,我已经尝试过了,它按预期工作。我会将它用作我的代码的一部分。我已经尝试了不同的 UIControlEvents 并且它没有按我的预期工作,可能是因为模拟器,我会测试我想到的其他一些东西并将其发回。谢谢!
标签: objective-c ios button path grid