gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:12 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com