2010-10-15 45 views
13

當在iOS中使用硬件鍵盤時,按Tab或Shift-Tab自動導航到下一個或上一個邏輯響應程序。有沒有辦法通過編程來實現(即模擬Tab鍵而不是手動跟蹤邏輯順序)?在iOS SDK中模擬選項卡按鍵

+6

重複的問題:http://stackoverflow.com/questions/3241966/專注於下一個有效的鍵在iphone上看到了一個很好的答案。 – 2011-06-30 06:06:28

回答

0

不知道這是否有幫助,但在UITextFields的上下文中,如果實現UITextFieldDelegate,則在按下軟鍵盤的返回鍵時將調用- (BOOL)textFieldShouldReturn:(UITextField *)textField

我試圖直接打在我的筆記本電腦鍵盤上,它似乎在所有文本框之間按順序添加到視圖中,但沒有轉到任何其他類型的域(按鈕等)。

鍵盤上的按鍵是模擬模擬器的軟鍵盤上的按鍵,它按預期工作。

3

您可以使用標籤屬性定義「標籤順序」。以下文章介紹如何找到UITextField s的下一個標籤索引, How to navigate through textfields (Next/Done Buttons)

以下是該帖子代碼的修改版本。下面的代碼不會去掉最後一個標籤索引處的鍵盤,而是會嘗試循環回第一個標籤索引。

-(BOOL)textFieldShouldReturn:(UITextField*)textField; 
{ 
    NSInteger nextTag = textField.tag + 1; 
    // Try to find next responder 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) { 
    // Found next responder, so set it. 
    [nextResponder becomeFirstResponder]; 

    return NO; 
    } 

    // Try to find the first responder instead... 
    // Assuming the first tag index is 1 
    UIResponder* firstResponder = [textField.superview viewWithTag:1]; 
    if (firstResponder) { 
    // loop back to the first responder 
    [firstResponder becomeFirstResponder]; 
    } else { 
    // Not found, so remove keyboard. 
    [textField resignFirstResponder]; 
    } 

    return NO; // We do not want UITextField to insert line-breaks. 
} 

如果你想比UITextField其他的UI元素,你應該仍然能夠使用相同的邏輯,與一些更多的檢查。

8

作爲William Niu是正確的,但你也可以使用下面解釋的代碼。

我已經使用這個並得到success.Now考慮的UITextField的例子...

可以使用的UITextView的委託方法-(BOOL)textFieldShouldReturn:(UITextField*)textField如下所述。

但是在做這個之前,你必須給每個UITextField以遞增順序賦予標記...(遞增順序不是必需的,但是對於我的代碼它是必需的,你也可以使用遞減順序,但是一些代碼對於這樣的變化)

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

    NSInteger nextTag = textField.tag + 1; 
    UIResponder* nextResponder = [self.view viewWithTag:nextTag]; 
    if (nextResponder) { 
     [nextResponder becomeFirstResponder];  
    } else { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

希望這會爲你工作...

快樂編碼....

+0

這適用於靜態文本字段,並且實際上是一種很好的方法,但如果您的文本字段位於可重複使用的tableviewcells中,它會變得焦躁不安。 – n00neimp0rtant 2014-05-14 14:21:43