2012-04-12 29 views
5

Tôi có một trường văn bản bên trong UIScrollView và tôi muốn hiển thị nút rõ ràng khi người dùng bắt đầu chỉnh sửa. Ngoài ra tôi cần phải ẩn bàn phím khi người dùng chạm vào nền của UIScrollview (nhưng không phải là trường văn bản). Hiển thị rằng nút rõ ràng không phải là một vấn đề, vấn đề là khi nút rõ ràng được khai thác bàn phím được ẩn và trường văn bản không bị xóa. Rõ ràng vấn đề là với bộ nhận dạng cử chỉ, bởi vì phương thức xử lý việc này được kích hoạt khi nhấn nút rõ ràng (nhưng nó không được kích hoạt khi trường văn bản được khai thác). Đây là mã của tôi:Nút xóa của UITextfield ẩn bàn phím khi bên trong UIScrollView

//adding gesture recognizer so i can hide keyboard when user taps scrollview 
    - (void) textFieldDidBeginEditing:(UITextField *)textField 
    { 
     if (self.tapOutside == nil) self.tapOutside = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textFieldTouchOutSide:)]; 

     [self.scrollView addGestureRecognizer:self.tapOutside]; 
    } 

    //This hides keyboard BUT IS ALSO CALLED WHEN CLEAR BUTTON IS TAPPED 
    - (void)textFieldTouchOutSide:(id)sender 
    { 
     [self.textfield resignFirstResponder]; 
    } 

    //NEVER GETS CALLED 
    - (BOOL) textFieldShouldClear:(UITextField *)textField { 
     return YES; 
    } 

Bất kỳ ý tưởng nào để giải quyết vấn đề này? Có lẽ cách nào tốt hơn để thêm trình nhận dạng cử chỉ? Tôi không thể nghĩ ra không có giải pháp thanh lịch ... Cảm ơn rất nhiều trước ...

Trả lời

13

tôi đã cùng một vấn đề và giải quyết nó thực hiện các phương pháp sau đây:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    // Disallow recognition of gestures in unwanted elements 
    if ([touch.view isMemberOfClass:[UIButton class]]) { // The "clear text" icon is a UIButton 
     return NO; 
    } 
    return YES; 
} 

Đừng quên để phù hợp Nghị định thư "UIGestureRecognizerDelegate" và thiết lập các đại biểu (sử dụng VAR của bạn):

self.tapOutside.delegate = self; 

Cheers

+0

không thể kiểm tra nó cho đến tuần sau, nhưng điều này có vẻ là một giải pháp ... cảm ơn rất nhiều! :) –

+0

Bạn đã thử nghiệm chưa? Nó có hoạt động không? Nếu có, vui lòng chấp nhận câu trả lời này. – Thompsonian

+0

Tôi đã có một lớp con UIButton tùy chỉnh cũng trên trang vì vậy tôi đã làm cho nó làKindOfClass: [UIButton class] –

2

tôi chỉ có vấn đề này và giải pháp này làm việc, tuy nhiên nếu yo u làm có các nút khác trên quan điểm cho rằng bạn cho phép người sử dụng để khai thác trong khi điền vào mẫu bạn có thể làm như sau:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
// Disallow recognition of gestures in unwanted elements 
if ([touch.view isMemberOfClass:[UIButton class]] && [touch.view.superview isMemberOfClass:[UITextField class]]) { 

    // The "clear text" icon is a UIButton 
    return NO; 
} 
return YES; 
} 

này sẽ thu hẹp các trường hợp để chỉ trả lại Không nếu nút là một subview của một UITextField, như là trường hợp với nút rõ ràng, nhưng vẫn ẩn bàn phím nếu họ chạm vào một nút bình thường mà thường sẽ thực thi mã cử chỉ của bạn.

Các vấn đề liên quan