Использование UITouch для перетаскивания UITextField вокруг экрана в iPhone - PullRequest
1 голос
/ 25 декабря 2010

Я разрабатываю пример приложения, в котором у меня есть ситуация для перемещения UITextFields, UILabels и т. Д. По экрану. Я не могу найти никакого ресурса для реализации этого.1001 *

Я хочу реализовать как this для UITextField

Спасибо всем заранее. Поздравления с наступающим Новым годом и Рождеством для всех пользователей stackoverflow

Ответы [ 2 ]

2 голосов
/ 25 декабря 2010

Я последовал предложению Майкла и получил решение. Я дал приведенные ниже фрагменты кода, которые будут полезны для тех, кому необходимо реализовать то же самое.

Шаги:

Выберите приложение на основе Windows, затем создайте подкласс UIViewController и добавьте его в окно в файле appdelegate.

В XIB созданного вами класса viewcontroller добавьте UIViews и добавьте элементы управления, такие как текстовое поле и т. Д., ВUIViews, которые вы создали. Мы собираемся переместить только эти представления, поэтому добавьте IBOutlets в файл .h подкласса контроллера представления и соответственно сопоставьте их с 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

Спасибо всем. У вас есть время для племянницы.

2 голосов
/ 25 декабря 2010

Поскольку у вас уже есть отличный учебник по перетаскиванию, я предполагаю, что ваша проблема - клавиатура, которая появляется, когда вы пытаетесь перетащить UITextField вместо UIView. Решение должно быть довольно простым: myTextField.userInteractionEnabled = NO; - это должно отключить взаимодействие с пользователем и сделать его «только для чтения». Возможно, есть режим редактирования, где все текстовые поля получают этот флаг установлен. Если это вызывает проблемы, тогда добавьте textField в UIView и затем установите для userInteractionEnabled значение false. Затем вы можете перетащить UIView, и он будет перетаскивать текстовое поле вместе с ним.

Надеюсь, что это поможет, и вам счастливых праздников!

...