1

在我的应用程序中,我创建了一个自定义数字键盘。如何在连续点击清除按钮时删除文本字段的全部内容。任何的想法?

4

2 回答 2

1

这是一个有趣的。

基本上我所做的是编写一个方法来将最后一个字符从 textField 的文本字符串中提取出来。

我添加了另一个在 Button 的 touchDown 事件上触发的方法,它首先调用该方法来擦除最后一个字符,然后启动一个计时器以开始重复。因为重复之前的延迟(至少在本机键盘上)比重复延迟要长,所以我使用了两个计时器。第一个的重复选项设置为 NO。它调用一个方法,该方法启动第二个定时器,该定时器重复调用擦除最后一个字符的方法。

除了 touchDown 事件。我们还注册了 touchUpInside 事件。触发时,它会调用使当前计时器无效的方法。

    #import <UIKit/UIKit.h> 

    #define kBackSpaceRepeatDelay 0.1f
    #define kBackSpacePauseLengthBeforeRepeting 0.2f

    @interface clearontapAppDelegate : NSObject <UIApplicationDelegate> {
        UIWindow *window;
        NSTimer *repeatBackspaceTimer; 
        UITextField *textField;
    }

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

    @end

    @implementation clearontapAppDelegate

    @synthesize window, 
    @synthesize repeatBackspaceTimer;

    - (void)applicationDidFinishLaunching:(UIApplication *)application {    
        textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 40, 300, 30)];
        textField.backgroundColor = [UIColor whiteColor];
        textField.text = @"hello world........";

        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(10, 80, 300, 30);
        button.backgroundColor = [UIColor redColor];
        button.titleLabel.text = @"CLEAR";

        [button addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown];
        [button addTarget:self action:@selector(touchUpInside:) forControlEvents:UIControlEventTouchUpInside];
        // Override point for customization after application launch


        [window addSubview:textField];
        [window addSubview:button];
        window.backgroundColor = [UIColor blueColor];
        [window makeKeyAndVisible];
    }


    -(void) eraseLastLetter:(id)sender {
        if (textField.text.length > 0) {
            textField.text = [textField.text substringToIndex:textField.text.length - 1];
        }
    }

    -(void) startRepeating:(id)sender {
        NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:kBackSpaceRepeatDelay
                                                          target:self selector:@selector(eraseLastLetter:)
                                                        userInfo:nil repeats:YES];
        self.repeatBackspaceTimer = timer;
    }

    -(void) touchDown:(id)sender {
        [self eraseLastLetter:self];
        NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:kBackSpacePauseLengthBeforeRepeting
                                                          target:self selector:@selector(startRepeating:)
                                                        userInfo:nil repeats:YES];
        self.repeatBackspaceTimer = timer;
    }

    -(void) touchUpInside:(id)sender {
        [self.repeatBackspaceTimer invalidate]; 
    }

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

    @end
于 2009-10-02T04:56:50.707 回答
0

在 touchUpInside 上,删除单个字符。

在touchDownRepeat上,删除整个单词或字段(我认为iPhone的delete首先一次删除一个单词)

于 2009-10-02T05:19:52.453 回答