使用UITouch在iPhone中的屏幕上拖动UITextField

时间:2010-12-25 05:51:35

标签: iphone uitextfield uitouch

我正在开发一个示例应用程序,我可以在屏幕上移动UITextFields,UILabels等。我无法找到实现此功能的任何资源。请建议我解决此问题。< / p>

我想为UITextField实现类似this

提前感谢所有人。 所有stackoverflow用户的圣诞快乐和高级新年愿望

2 个答案:

答案 0 :(得分:2)

由于您已经有一个很好的拖动教程,我将假设您的问题是当您尝试拖动UITextField而不是UIView时出现的键盘。解决方案应该非常简单:myTextField.userInteractionEnabled = NO; - 应该禁用用户交互并使其“只读”。也许有一个编辑模式,其中所有文本字段都设置此标志。如果它导致问题,则将textField添加到UIView,然后将userInteractionEnabled设置为false。然后你可以拖动UIView,然后用它拖动文本字段。

希望有帮助,祝你节日快乐!

答案 1 :(得分:2)

我遵循迈克尔的建议并得到了解决方案。我已经给出了下面的代码片段,这对那些需要实现它的人来说非常有用。

<强>步骤:

选择基于Windows的应用程序,然后创建一个UIViewController子类并将其添加到appdelegate文件中的窗口。

在viewcontroller类的XIB中,您创建了添加UIViews并将控件(如textfield等)添加到您创建的UIViews。我们将仅移动这些视图,因此在.h文件中添加IBOutlets查看控制器子类并相应地将它们映射到IB。

示例代码

<强> appdelegate.h

#import <UIKit/UIKit.h>
#import "MyView.h"

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;
MyView *viewController;
 }

@property (nonatomic, retain) IBOutlet UIWindow *window;
@end

<强> appdelegate.m

#import "MyAppDelegate.h"


@implementation MyAppDelegate

@synthesize window;


- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    // Override point for customization after application launch.
    viewController=[[MyView alloc]init];
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

}

- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}


@end

viewcontroller.h

#import <UIKit/UIKit.h>


@interface MyView : UIViewController {

    IBOutlet UIView *textFieldView;
    IBOutlet UIView *labelView;

}

@end

viewcontroller.m

#import "MyView.h"


@implementation MyView


- (void)viewDidLoad {

    [self.view addSubview:textFieldView];
    [self.view addSubview:labelView];
    [super viewDidLoad];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    // get touch event
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    if ([touch view] == textFieldView) {
        // move the image view
        textFieldView.center = touchLocation;
    }
    if ([touch view] == labelView) {
        // move the image view
        labelView.center = touchLocation;
    }

}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];
}


@end

谢谢大家。有侄女的时间。