iPhone界面上文本框UITextField的软键盘隐藏(取消第一响应)和移动键盘下面的内容

在iPhone界面上,时常会需要当用户输入完内容后,隐藏键盘。
当然有很多方法,今天只介绍resignFirstResponder和UITextFieldDelegate这个协议实现隐藏键盘。

方法1:使用UITextFieldDelegate来隐藏键盘

其实很简单, 需要三步:
1. 在你的控制器类中,加入UITextFieldDelegate这个协议
如:@interface AddItemViewController : UIViewController <UITextFieldDelegate>

2. 在使用了UITextFieldDelegate协议的控制器类的实现中,加入- (BOOL)textFieldShouldReturn:方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {

        [textField resignFirstResponder];
        return YES;
}


3. 将xib文件中的TextField控件的delegate变量指向到之前使用UITextFieldDelegate协议的那个控制器类,

将TextField的delegate IBOutlet变量右键链接到前面的控制器类的实例上。
或者使用代码方式,指定相关TextField的delegate变量。
- (void)viewDidLoad {
    [super viewDidLoad];
        itemNameField.delegate = self;
        priceField.delegate = self;
}
itemNameField和priceField为相应的TextField名。



方法2:在窗口的最底层添加一个320*480的UIControl控件:


UIControl *backGroundControl = [[UIControl alloc] initWithFrame:
                                CGRectMake(0, 0, 320, 480)];
backGroundControl.backgroundColor = [UIColor clearColor];
[backGroundControl addTarget:self
                      action:@selector(backgroundTab)
            forControlEvents:UIControlEventTouchUpInside];
[window addSubview:backGroundControl];



定义一个方法
- (void)backgroundTab
{
    [field resignFirstResponder];
}



方法3:在相应的程序中添加:
    [txtCmd resignFirstResponder];
    [sender resignFirstResponder]; 



怎么把键盘上的return键改成Done textField.returnKeyType = UIReturnKeyDone







移动键盘下面的内容





         当系统收到显示键盘的请求时,就从屏幕的底部滑出键盘,并将它放在应用程序内容的上方。由于键盘位于您的内容的上面,所以有可能遮掩住用户希望编辑的文本对象。如果这种情况发生,就必须对内容进行调整,使目标对象保持可见。
需要做的调整通常包括暂时调整一或多个视图的尺寸和位置,从而使文本对象可见。管理带有键盘的文本对象的最简单方法是将它们嵌入到一个UIScrollView(或其子类,如UITableView)对象。当键盘被显示出来时,您需要做的只是调整滚动视图的尺寸,并将目标文本对象滚动到合适的位置。为此,在UIKeyboardDidShowNotification通告的处理代码中需要进行如下操作:
[list=1] 取得键盘的尺寸。
将滚动视图的高度减去键盘的高度。
将目标文本框滚动到视图中。
图5-6演示了一个简单的应用程序如何处理上述的几个步骤。该程序将几个文本输入框嵌入到UIScrollView对象中,当键盘出现时,通告处理代码首先调整滚动视图的尺寸,然后用UIScrollView类的scrollRectToVisible:animated:方法将被触击的文本框滚动到视图中。
图5-6  调整内容的位置,使其适应键盘





请注意:在配置滚动视图时,请务必为所有的内容视图配置恰当的自动尺寸调整规则。在之前的图中,文本框实际上是一个UIView对象的子视图,该UIView对象又是UIScrollView对象的子视图。如果该UIView对象的UIViewAutoresizingFlexibleWidth和UIViewAutoresizingFlexibleHeight选项被设置了,则改变滚动视图的边框尺寸会同时改变它的边框,因而可能导致不可预料的结果。禁用这些选项可以确保该视图保持尺寸不变,并正确滚动。
程序清单5-1显示了如何注册接收键盘通告和如何实现相应的处理器方法。这段代码是由负责滚动视图管理的视图控制器实现的,其中scrollView变量是一个指向滚动视图对象的插座变量。每个处理器方法都从通告的info对象取得键盘的尺寸,并根据这个尺寸调整滚动视图的高度。此外,keyboardWasShown:方法的任务是将当前活动的文本框矩形滚入视图,该文本框对象存储在一个定制变量中(在本例子中名为activeField),该变量是视图控制器的一个成员变量,在textFieldDidBeginEditing:委托方法中进行赋值,委托方法本身的代码显示在程序清单5-2中(在这个例子中,视图控制器同时也充当所有文本输入框的委托)。
程序清单5-1  处理键盘通告


// Call this method somewhere in your viewcontroller setup code.
- (void)registerForKeyboardNotifications
{
   [[NSNotificationCenter defaultCenter] addObserver:self
           selector:@selector(keyboardWasShown:)
           name:UIKeyboardDidShowNotification object:nil];

   [[NSNotificationCenter defaultCenter] addObserver:self
           selector:@selector(keyboardWasHidden:)
           name:UIKeyboardDidHideNotification object:nil];
}

// Called when the UIKeyboardDidShowNotificationis sent.
-(void)keyboardWasShown:(NSNotification*)aNotification
{
   if (keyboardShown)
       return;

   NSDictionary* info = [aNotification userInfo];

   // Get the size of the keyboard.
   NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
   CGSize keyboardSize = [aValue CGRectValue].size;

   // Resize the scroll view (which is the root view of the window)
   CGRect viewFrame = [scrollView frame];
   viewFrame.size.height -= keyboardSize.height;
   scrollView.frame = viewFrame;

   // Scroll the active text field into view.
   CGRect textFieldRect = [activeField frame];
   [scrollView scrollRectToVisible:textFieldRect animated:YES];

   keyboardShown = YES;
}


// Called when theUIKeyboardDidHideNotification is sent
-(void)keyboardWasHidden:(NSNotification*)aNotification
{
   NSDictionary* info = [aNotification userInfo];

   // Get the size of the keyboard.
   NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
   CGSize keyboardSize = [aValue CGRectValue].size;

   // Reset the height of the scroll view to its original value
   CGRect viewFrame = [scrollView frame];
   viewFrame.size.height += keyboardSize.height;
   scrollView.frame = viewFrame;

   keyboardShown = NO;
}

上面程序清单中的keyboardShown变量是一个布尔值,用于跟踪键盘是否可见。如果您的用户界面有多个文本输入框,则用户可能触击其中的任意一个进行编辑。发生这种情况时,虽然键盘并不消失,但是每次开始编辑新的文本框时,系统都会产生UIKeyboardDidShowNotification通告。您可以通过跟踪键盘是否确实被隐藏来避免多次减少滚动视图的尺寸。
程序清单5-2显示了一些额外的代码,视图控制器用这些代码来设置和清理之前例子中的activeField变量。在初始化时,界面中的每个文本框都将视图控制器设置为自己的委托。因此,当文本编辑框被激活的时候,这些方法就会被调用。更多关于文本框及其委托通告的信息,请参见UITextField类参考
程序清单5-2  跟踪活动文本框的方法

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    activeField = textField;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    activeField = nil;
}

你可能感兴趣的:(iPhone界面上文本框UITextField的软键盘隐藏(取消第一响应)和移动键盘下面的内容)