0

I do some practice with iPhone4S about UITextField on iOS 7.1.2.

Interface:

The interface of the first version is simple, which just has a custom UITextField named MyUITextField and a UIButtom object that use to cancel the search operation. Inside the textField, its leftView property is initially set to a UIButton object, which background image is a magnifying glass. When users tap in the textField, that magnifying glass button will be removed and the leftView property will also set to a new UIButton object, which background image is a inverted triangle. When users tap the triangle button, app will create a new view object.

Main code:

//In this version,the textField's original frame property is set to (10,40,250,30) 
//and the main operations are like this:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.myTextField.delegate = self;
    self.myTextField.leftViewMode = UITextFieldViewModeUnlessEditing;
    self.myTextField.leftView = [self creCustomSearchBar];

    [[NSNotificationCenter defaultCenter] addObserver:self  
                                             selector:@selector(keyBoardWillAppear:) 
                                                 name:@"UIKeyboardWillShowNotification" 
                                               object:nil];
    [self.cancleSearchButton addTarget:self 
                                action:@selector(cancleSearch:) 
                      forControlEvents:UIControlEventTouchUpInside];
}

/*when tapping in the textField,keyboard will appear*/
- (void)keyBoardWillAppear:(NSNotification *)notification
{
    CGRect newLeftViewIndicatorRect = CGRectMake(20,5,20,20);
    UIButton *newLeftViewIndicator = [[UIButton alloc] initWithFrame:newLeftViewIndicatorRect];
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"searchbar_textfield_down_icon@2x" ofType:@"png"];

    [newLeftViewIndicator setBackgroundImage:[UIImage imageWithContentsOfFile:imagePath] forState:UIControlStateNormal];
    [newLeftViewIndicator addTarget:self action:@selector(createActuralLeftView:) forControlEvents:UIControlEventTouchUpInside];

    self.myTextField.leftView = newLeftViewIndicator;
    /*in the second verson need to call */
    //[self adjustViewFrame];
    [self.cancleSearchButton setTitle:@"取消" forState:UIControlStateNormal];
}

- (void)createActuralLeftView:(UIButton *)leftViewButton
{
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                     action:@selector(tapRegionAboveKeyboard:)];
    [self.view addGestureRecognizer:tapGesture];
    NewLeftView *leftView = [[NewLeftView alloc] initWithFrame:CGRectMake(10, 80, 140, 100)];
    leftView.delegate = self;
    [self.view addSubview:leftView];
}

- (void)tapRegionAboveKeyboard:(UITapGestureRecognizer *)tapGesture
{
    for (UIView *v  in self.view.subviews) {
        if ([v isKindOfClass:[NewLeftView class]]) {
            [v removeFromSuperview];
            [self.view removeGestureRecognizer:tapGesture];
            return;
        }
    }
}

//in the second version need to call 
- (void)adjustViewFrame
{
    [[self.myTextField class] animateWithDuration:0.05 animations:^{
        [self.myTextField setFrame:CGRectMake(self.myTextField.frame.origin.x, 40, self.myTextField.frame.size.width, self.myTextField.frame.size.height)];
    }];
    [[self.cancleSearchButton class] animateWithDuration:0.05 animations:^{
        [self.cancleSearchButton setFrame:CGRectMake(self.cancleSearchButton.frame.origin.x, 40, self.cancleSearchButton.frame.size.width, self.cancleSearchButton.bounds.size.height)];
    }];
}

In the first version things work well.

But in the second version, I set the textField frame property to (10,260,250,30), so I need to call the adjustViewFrame method in the keyBoardWillAppear: to reposition the textField in case of obscuring by the keyboard.

Here comes the problem: the textField's position is correctly moved to the right place, but when I tap the inverted triangle button, the textField disappeared.

I can't figure out what's going wrong here.

nora
  • 1
  • 3
  • What is `inverted triangle button` ? you mean when you hide the keyboard ? – deimus Oct 22 '14 at 13:41
  • "When users tap in the textField, that magnifying glass button will be removed and the leftView property will also set to a new UIButton object,which background image is a inverted triangle.When users tap the triangle button, app will create a new view object." As describled above, it's just a UIButton object,which background image is a inverted triangle. If you know the (sina)Weibo client search interface,you know what I mean. Sorry to make you confused.@deimus – nora Oct 22 '14 at 14:06

0 Answers0