在addsubview + commitAnimations之后,UITextfield没有响应

时间:2011-03-14 14:13:23

标签: iphone objective-c ios uiviewanimation

我遇到了一个愚蠢的事情: 我有一个带导航栏和表视图的视图。 我的导航栏有一个“搜索”左按钮。 当用户按下这个“搜索”按钮时,我希望我的桌面视图关闭,并且我的导航栏和我的桌面视图之间有一个专用于搜索的新视图。

  • 我有一个只需实现UITextfield的视图控制器:

    #import <UIKit/UIKit.h>
    
    
    @interface serachBox : UIViewController <UITextFieldDelegate> {
         IBOutlet UITextField *kWTextField;     
    } 
    
    @end
    
  • 我的其他视图控制器有我的元素(导航栏,表格栏......)。这是我在按下搜索按钮时使用的功能:

    - (void) pressSearchBtn:(id)sender{
    
        [searchBox.view setFrame:CGRectMake(0, -100, 320, 100)];
        CGRect theFrame = self.view.frame;
        [UIView beginAnimations:@"frame" context:nil];
        [UIView setAnimationDuration:0.5];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        theFrame.origin.y = 100;   
        [self.view addSubview:searchBox.view];
        self.view.frame = theFrame;
        [UIView commitAnimations];
    
    }
    

我的问题:我的搜索框视图显示效果不错,但是当我点击它时,她的文本字段没有响应。我测试了一个简单的添加子视图(没有执行动画的东西)并且它可以工作。

怎么回事?

3 个答案:

答案 0 :(得分:0)

嘿,在最后的pressSearchBtn动作中添加这个。

[kWTextField becomeFirstResponder];

答案 1 :(得分:0)

或者你可以这样做。在Interface Builder中,将文本字段放在视图顶部而不是视图之外。把它放在(0,0)大小(320,31)。然后在tools-&gt;属性检查器中检查textfield的hidden属性为true。然后在buttonClick中输入此代码。

- (void) pressSearchBtn:(id)sender{ 

    kwtextField.alpha = 0;
    [UIView beginAnimations:@"frame" context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    kwtextField.hidden = FALSE;
    kwtextField.alpha = 1;
    [UIView commitAnimations];
}

答案 2 :(得分:0)

嘿,我终于为你完成了它。

将文本字段放在界面构建器的任何位置,将其隐藏在工具中 - &gt;属性检查员。

在viewDidLoad方法中执行此操作

- (void)viewDidLoad {

    CGRect frame = CGRectMake(0, -100, 320, 580);

    self.view.frame = frame;

    text.frame = CGRectMake(0, self.view.frame.origin.y, 320, 100);

    [super viewDidLoad];
}

然后在btnClick方法中写下这个。

-(IBAction) btnClicked: (id) sender
{

    CGRect frame1 = CGRectMake(0, 0, 320, 100); 
    text.hidden = FALSE;
    CGRect frame = self.view.frame;
    [UIView beginAnimations:@"frame" context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    frame.origin.y = 0;
    self.text.frame = frame1;
    self.view.frame = frame;
    [UIView commitAnimations];

}

欢呼声!!!