在Objective C (iOS)中拖放控件



这是我在谷歌上搜索各种编程问题的结果后提出的第一个关于Stack Overflow的问题。

我的问题是关于iOS开发的。基本上我有一个按钮,当按下时,在视图上创建另一个按钮。我希望用户能够在表单周围拖动按钮。通过搜索,我找到了显示如何移动按钮的代码,但这需要有一个出口连接到它(因此您可以设置center属性)。由于按钮是在另一种方法中以编程方式创建的,我不知道如何设置center属性。

这是我的addButton: method:

-(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。

一旦成为类的属性,任何方法都可以设置它的属性。

编辑:

用NSMutableArray属性代替UIButton属性。然后只需将新按钮添加到数组中,这样就可以保留对它们的引用。只要记住如果你去移除一个调用[buttonToRemove removeFromSuperview]并从数组中移除。

编辑(2):

你最初的问题是关于制作第二个按钮并移动它。UIButton的属性会很好地工作。因为你在视图上移动一个对象接收触摸*事件。如果我是你,我会坚持这种方法,直到你习惯了touch *事件。

当你准备好继续前进时。你可以管理多个运行时创建的uiview(在你的情况下,你想使用按钮),你必须选择:

1)在你的视图控制器的touchesBegan:迭代你的按钮数组,看看是否触摸落在其中一个,然后跟踪触摸,直到touchesEnded:调用。

2)子类化UIView,让它处理自己的触摸事件。

第二种方法更容易管理。

编辑(3):如果你希望父视图处理触摸*事件而不是按钮,你需要设置[button setUserInteractionEnabled:NO]

我做过类似的事情,但以不同的方式:您可以创建按钮,然后在矩形中移动它们(实际上是稍后实际尺寸视图的缩放视图)并更改大小,使用4个滑块和其他按钮进行微调。它非常简单,只要将目标按钮的框架始终设置为新值。我没有使用拖拽的方式,因为按钮对于手指来说太小了。

最新更新