这是我在 Stack Overflow 上的第一个问题,在阅读了谷歌搜索各种编程问题的许多结果之后。
我的问题是关于 iOS 开发的。 基本上我有一个按钮,当按下它时,它会在 View 上创建另一个按钮。我希望用户能够在表单周围拖动该按钮。通过搜索,我找到了显示如何移动按钮的代码,但这需要连接一个 socket (以便您可以设置 center 属性)。由于按钮是用另一种方法以编程方式创建的,所以我不知道如何设置中心属性。
这是我的 addButton: 方法:
-(IBAction)addButton:(id)sender{
CGRect frame = CGRectMake(5.0, 25.0, 40.0, 40.0);
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(moveButton:) forControlEvents:UIControlEventTouchDragInside];
[button setTitle:@"Test Button" forState:UIControlStateNormal];
button.frame = frame;
[myView addSubview:button];
以及我在 touchesMoved: 方法中输入的内容:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
我是 iOS 开发的新手,所以我不太确定如何解决这个问题。
最佳答案
您应该使第二个按钮成为您的类的属性。首先在 .h+.m 文件中声明属性,就像第一个由 xCode 自动声明一样。然后在示例代码的末尾添加 self.secondButtonPropertyNameHere = button;
一旦它成为类的属性,任何方法都可以设置它的属性。
编辑:
使用 NSMutableArray 属性代替 UIButton 属性。然后只需将新按钮添加到数组中,这样您就可以保留对它们的引用。请记住,如果您要删除一个调用 [buttonToRemove removeFromSuperview] 并从数组中删除。
编辑(2):
您最初的问题是制作第二个按钮并四处移动它。 UIButton 的属性将适用于此。因为您要在接收 touches* 事件的 View 上移动一个对象。如果我是你,我会坚持使用这种方法,直到你对触摸*事件感到满意为止。
当您准备好继续前进时。你可以管理多个运行时创建的 UIViews(在你的情况下你想使用按钮)你必须选择:
1) 在您的 View Controller 的 touchesBegan: 中遍历您的按钮数组以查看触摸是否落在其中一个按钮上,然后跟踪触摸直到 touchesEnded: 调用。
2) 子类化 UIView 并让它处理自己的触摸*事件。
第二种更容易管理。
编辑(3):
如果您希望 super View 处理触摸*事件而不是按钮,则需要设置 [button setUserInteractionEnabled:NO]
。
关于objective-c - 在 Objective C (iOS) 中拖放控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829257/