objective-c - 在 Objective C (iOS) 中拖放控件

标签 objective-c ios

这是我在 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/

相关文章:

iphone - 核心数据中带有嵌套对象数组的 Restkit 复杂对象映射

iphone - UIKit:CGAffineTransforms 和复合动画

ios - Alpha 在 UITableViewCell 中不起作用

ios - 如何限制捏缩放图像向图像边界的移动?

iOS - 添加 Firebase 消息时出现重复符号(与 Google Analytics 冲突)

objective-c - 在不破坏沙箱的情况下检查外部应用程序是否存在的代码

objective-c - 如何在 Objective-C 中使用 Redis?

ios - -[UIViewController tableView :numberOfRowsInSection:]: unrecognized selector sent to instance 0x7ff437517770

ios - SKCameraNode 函数 containsNode() 和 containedNodeSet() 没有按预期工作

iphone - 控制 iPhone 上的自动更正 View 位置