2011-09-07 33 views
7

Mã của tôi:Làm thế nào để thêm trường văn bản để inputAccessoryView và làm cho TextView responder đầu tiên

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    CGRect rectFake = CGRectZero; 

    UITextField *fakeField = [[UITextField alloc] initWithFrame:rectFake]; 

    [self.view addSubview:fakeField]; 

    UIView *av = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 39.0)]; 

    av.backgroundColor = [UIColor darkGrayColor]; 

    CGRect rect = CGRectMake(200.0, 4.0, 400.0, 31.0); 

    UITextField *textField = [[UITextField alloc] initWithFrame:rect]; 

    textField.borderStyle = UITextBorderStyleRoundedRect; 

    textField.font = [UIFont systemFontOfSize:24.0]; 

    textField.delegate = self; 

    [av addSubview:textField]; 

    fakeField.inputAccessoryView = av; 

    [fakeField becomeFirstResponder]; 

} 

Tôi cố gắng thêm

[textField becomeFirstResponder] 

ở cuối, nhưng nó không làm việc.

Một vấn đề khác mà phương thức ủy nhiệm để ẩn bàn phím khi ENTER được nhấn cũng không hoạt động.

- (BOOL) textFieldShouldReturn:(UITextField *)textField { 

    [textField resignFirstResponder]; 

    return YES; 
} 
+0

thử UIView này * av = [[UIView alloc] initWithFrame: CGRectMake (0,0, 0,0, 320,0, 39,0)]; –

+0

Xin lỗi tôi đã không đề cập rằng nó dành cho iPad và chế độ xem này trải dài dọc theo bàn phím, vì vậy chiều rộng không có ý nghĩa. – Michael

Trả lời

13

Tôi đang đối mặt với cùng một thách thức. Cách tiếp cận của bạn (và ban đầu) của tôi có thể không hoạt động vì trường văn bản trong số inputAccessoryView từ chối trở thành người trả lời đầu tiên vì số UITextField không được đặt trên màn hình của bạn lúc đầu.

Giải pháp của tôi: kiểm tra thời điểm bàn phím (và với giao diện phụ kiện đó) xuất hiện!

Bước 1) Lắng nghe thông báo (đảm bảo mã này được thực hiện trước khi bạn muốn nhận thông báo).

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(changeFirstResponder) 
              name:UIKeyboardDidShowNotification 
              object:nil]; 

Bước 2) Khi bàn phím đã xuất hiện, bạn có thể thiết lập các textfield trong inputAccessoryView của bạn để trở thành responder đầu tiên:

-(void)changeFirstResponder 
{ 
    [textField becomeFirstResponder]; // will return YES; 
} 
+0

Tôi đang cố gắng để đạt được điều tương tự và ý tưởng của bạn có vẻ như nó có thể làm việc, tuy nhiên làm thế nào để bạn nói với bàn phím để xuất hiện ở nơi đầu tiên? Tôi có một nút UIButton khi nhấn Tôi cần bàn phím để hiển thị với một trường văn bản trong giao diện phụ kiện. – Darren

+0

@ Darren Tôi biết một giải pháp thay thế dơ bẩn và đó là để có một trường văn bản (ẩn) trong chế độ xem hiện tại của bạn và sử dụng thao tác nút để đặt '[yourHiddenTextField trở thànhFirstResponder]' – Tom

+0

Thats chính xác những gì tôi cần làm. Thx – Darren

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