2012-04-30 18 views
39

Tôi có một vài đầu vào văn bản và tôi có thể ẩn bàn phím bất cứ khi nào tôi chạm vào nền, nhưng chỉ khi tôi đã nhập vào tên hộp văn bản đầu tiên textField1. bây giờ mã này nên được đơn giản nhưng tôi chỉ cant dường như để có được nó, những gì tôi đang làm sai ??ẩn bàn phím ios

-(IBAction)backgroundTouched:(id)sender { 
[textField1 resignFirstResponder]; 
[buildLength resignFirstResponder]; 
[buildWidth resignFirstResponder]; 
[ridgeWidth resignFirstResponder]; 
[rafterWidth resignFirstResponder]; 
[hipWidth resignFirstResponder]; 
[eaveOverhang resignFirstResponder]; 
[spacing resignFirstResponder]; 

}

+0

đối tượng được nhận 'backgroundTouched gì? Đó có phải là quan điểm? Một số đối tượng bạn đặt đằng sau tất cả mọi thứ? Cách mà tôi có một bàn phím để ẩn trên iOS là ghi đè lên 'touchesEnded: withEvent:' của ViewController. Nó được gọi khi không có đối tượng khác có thể xử lý một sự kiện cảm ứng. Trong đó là nơi tôi từ chức trả lời đầu tiên, mặc dù bạn cần phải kiểm tra 'isFirstResponder' bởi vì nếu bạn không tiêu thụ các liên lạc bạn đang giả sử để gọi siêu. – Russ

+0

Đồng ý với @Russ ... sự kiện chạm trên bộ điều khiển chế độ xem là cách đơn giản hơn để thực hiện. Nhưng nó vẫn còn bí ẩn nếu nó hoạt động cho textField1. Tại sao không phải những người khác? Tôi đoán là các tay cầm khác không tốt (ví dụ: 'buildLength' không được khởi tạo đúng cách). – danh

Trả lời

2

Bạn có thể thử UITouch phương pháp, và trong này thiết lập đối tượng văn bản lĩnh vực của bạn và gọi resignFirstResponder khi đã bao giờ bạn chạm trên màn hình bàn phím sẽ từ chức, tôi hy vọng điều này sẽ làm việc cho bạn.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [currentSelectedTextField resignFirstResponder]; 
} 
186

Nếu bạn muốn ẩn bàn phím khi bạn chạm vào một nút và bạn có nhiều hơn một UITextFields trong view của bạn, sau đó bạn nên sử dụng:

[self.view endEditing:YES]; 

Tap bất cứ nơi nào trên xem, và bàn phím sẽ biến mất.

+0

Tôi nhận thấy, trong một số trường hợp, phương pháp này hoạt động sau một số độ trễ tối đa khoảng 0,3 giây. Ý tôi là, resignFirstResponder sẽ xóa bàn phím ngay lập tức. Nhưng phương pháp này không và bạn nên sử dụng performSelector sau khi trì hoãn đôi khi sau khi sử dụng. – wzbozon

6

Bạn cũng có thể lặp qua một loạt các khung nhìn (chẳng hạn như tiểu sử của UIView) và từ bỏ thủ công bàn phím, điều này là tốt nếu bạn không muốn từ chức trên TẤT CẢ các bản phụ trong UIView mẹ của bạn.

- (void)viewDidLoad 
{ 
    self.view.userInteractionEnabled = TRUE; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    //Iterate through your subviews, or some other custom array of views 
    for (UIView *view in self.view.subviews) 
     [view resignFirstResponder]; 
} 
27

Hãy thử điều này: `hành động:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[self view] endEditing:YES]; 
}