0

ビューをタップするUITextFieldと表示されるプログラムがあります。また、元に戻すボタンもあります。ダブルタップで削除できる機能を作りたかったのUITextfieldです。私を助けてください。

これが私のコードです:

ViewController.h

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>


@interface ViewController : UIViewController<UITextFieldDelegate, UIGestureRecognizerDelegate>
{

    NSMutableArray *textfieldform;
    UITextField *textField1;
    float   angle;
    CGFloat beginX;
    CGFloat beginY;
    IBOutlet UIView *blahBlah;
    CGPoint prevPanPoint;
    float prevPinchScale;
    float prevRotation;
}

@property (nonatomic, retain) NSMutableArray *textfieldform;

-(IBAction) undo;
- (IBAction)handleTap2:(UITapGestureRecognizer *)recognizer;

@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize text1, textfieldform;


- (void)viewDidLoad
{
    [super viewDidLoad];
    //textfieldform = [[NSMutableArray alloc] init];
    // Do any additional setup after loading the view, typically from a nib.
    textfieldform = [NSMutableArray arrayWithCapacity:0];
    angle = 180;

    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scaleImage:)];
    [blahBlah addGestureRecognizer:pinchGesture];

    UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateImage:)];
    [blahBlah addGestureRecognizer:rotationGesture];

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureAction:)];
    [pan setMaximumNumberOfTouches:1];
    [pan setMinimumNumberOfTouches:1];
    [blahBlah addGestureRecognizer:rotationGesture];

    UITapGestureRecognizer *twoFingersTwoTaps = 
  [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingersTwoTaps)] ];
[twoFingersTwoTaps setNumberOfTapsRequired:2];
[twoFingersTwoTaps setNumberOfTouchesRequired:2];
[blahBlah addGestureRecognizer:twoFingersTwoTaps];

}


- (void)twoFingersTwoTaps {
  NSLog(@"Action: Delete text, two taps");
} 

-(void)panGestureAction:(UIPanGestureRecognizer *)pan {

    if (pan.state == UIGestureRecognizerStateBegan){
        prevPanPoint = [pan locationInView:blahBlah];
    }

    CGPoint curr = [pan locationInView:blahBlah];

    float diffx = curr.x - prevPanPoint.x;
    float diffy = curr.y - prevPanPoint.y;

    CGPoint centre = textField1.center;
    centre.x += diffx;
    centre.y += diffy;
    textField1.center = centre;

    prevPanPoint = curr;
}


-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

    if([touch.view isKindOfClass:[UIView class]]) {
        return YES;
    }
    return NO;
}

- (void)scaleImage:(UIPinchGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateBegan)
        prevPinchScale = 1.0;

    float thisScale = 1 + (recognizer.scale-prevPinchScale);
    prevPinchScale = recognizer.scale;
    textField1.transform = CGAffineTransformScale(textField1.transform, thisScale, thisScale);
}

- (void)rotateImage:(UIRotationGestureRecognizer *)recognizer
{
    if([recognizer state] == UIGestureRecognizerStateEnded) {

            prevRotation = 0.0;
    } 

    float thisRotate = recognizer.rotation - prevRotation;
    prevRotation = recognizer.rotation;
    textField1.transform = CGAffineTransformRotate(textField1.transform, thisRotate);
}


-(IBAction)undo{
    UITextField *textFieldToRemove = [textfieldform lastObject];
    if (textFieldToRemove) {
        [textfieldform removeObject:textFieldToRemove];
        [textFieldToRemove removeFromSuperview];
    }
}


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 

    NSLog(@"textFieldShouldBeginEditing");
    return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{           

    NSLog(@"textFieldDidBeginEditing");
    [textField1  setBackgroundColor:[UIColor colorWithRed:(248/255.0) green:(248/255.0) blue:(255/255.0) alpha:1.0]];
    textField1.borderStyle = UITextBorderStyleRoundedRect;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{

    NSLog(@"textFieldShouldEndEditing");
    textField.backgroundColor = [UIColor clearColor];
    return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField{

    NSLog(@"textFieldDidEndEditing");
    [textField1  setBackgroundColor:[UIColor clearColor]];
    textField1.borderStyle = UITextBorderStyleNone;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    NSLog(@"textField:shouldChangeCharactersInRange:replacementString:");

    if ([string isEqualToString:@"#"]) {
        return NO;
    }
    else {
        return YES;
    }

}
- (BOOL)textFieldShouldClear:(UITextField *)textField{

    NSLog(@"textFieldShouldClear:");
    return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{

    NSLog(@"textFieldShouldReturn:");

    if (textField.tag == textfieldform.count) {
        textField1 = (UITextField *)[self.view viewWithTag:textfieldform.count];
        [textField1 becomeFirstResponder];
    }
    else {
        [textField resignFirstResponder];
    }

    return YES;
}

- (IBAction)handleTap2:(UITapGestureRecognizer *)recognizer{

    if (recognizer.state == UIGestureRecognizerStateEnded){
        CGPoint point = [recognizer locationInView:[self view]];
        textField1 = [[UITextField alloc] init];
        textField1.borderStyle = UITextBorderStyleLine;
        textField1.font = [UIFont systemFontOfSize:15];

        CGRect frame ;    
        frame.origin.x = point.x;
        frame.origin.y = point.y; 
        frame.size.width=300;
        frame.size.height=40;

        textField1.frame=frame;

        textField1.autocorrectionType = UITextAutocorrectionTypeNo;
        textField1.keyboardType = UIKeyboardTypeDefault;
        textField1.returnKeyType = UIReturnKeyDefault;
        textField1.clearButtonMode = UITextFieldViewModeWhileEditing;
        textField1.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;    
        textField1.delegate = self;
        textField1.tag = textfieldform.count;
        textField1.font = [UIFont fontWithName:@"Arial" size:30];
        [textfieldform addObject:textField1];
        [blahBlah addSubview:textField1];

        [textField1 addTarget:self action:@selector(wasDragged:withEvent:) forControlEvents:UIControlEventTouchDragInside];

    }

}

- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event{
    // get the touch
    UITouch *touch = [[event touchesForView:textField1] anyObject];

    // get delta
    CGPoint previousLocation = [touch previousLocationInView:textField1];
    CGPoint location = [touch locationInView:textField1];
    CGFloat delta_x = location.x - previousLocation.x;
    CGFloat delta_y = location.y - previousLocation.y;

    // move button
    textField1.center = CGPointMake(textField1.center.x + delta_x,textField1.center.y + delta_y);

}

- (void)moveImage:(UIPanGestureRecognizer *)recognizer
{
    CGPoint newCenter = [recognizer translationInView:self.view];
    if([recognizer state] == UIGestureRecognizerStateBegan) {
        beginX = textField1.center.x;
        beginY = textField1.center.y;
    }
    newCenter = CGPointMake(beginX + newCenter.x, beginY + newCenter.y);
    [textField1 setCenter:newCenter];
}

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end
4

1 に答える 1

0
UITextField *textFieldToRemove = [textfieldform objectAtIndex:0];
            if (textFieldToRemove) {
                NSLog(@"baaaaaaam! remove %i", textfieldform.count);
                [textfieldform removeObject:textFieldToRemove];
                [textFieldToRemove removeFromSuperview];
            } 

私はちょっとそれを理解しました。:)

于 2012-11-15T00:40:38.553 に答える