2017-08-09 28 views
3

我在註冊表單中有一堆文本字段,這些註冊表單在XIB文件的兩個垂直堆棧視圖中組織。我注意到,在模擬器中運行應用程序時,我可以按下Tab鍵,iOS會自動移動到下一個文本字段。當您按下模擬器上的Tab鍵時,iOS如何確定下一個要關注的文本字段?

但這有時不起作用,我想知道爲什麼。有時,系統會從另一個堆棧視圖而不是其下面的字段中聚焦文本字段。

我已經設置了接下來的文本字段鏈(按Next軟鍵盤的時候)是這樣的:

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    NSUInteger index = [self.textFields indexOfObject:textField]; 
    if (index != NSNotFound) { 
     if (index == self.textFields.count - 1) { 
      [textField resignFirstResponder]; 
      [self createAccount]; 
     } else { 
      UITextField *nextTextField = self.textFields[index + 1]; 
      [nextTextField becomeFirstResponder]; 
     } 
     return NO; 
    } 
    return YES; 
} 

textFields的是,這個屏幕有從上到下的所有文本字段的數組。

我只是希望能夠通過輸入幾個字符並按Tab鍵而不需要額外的鼠標點擊來快速填寫表單。可能嗎?

看起來-textFieldShouldReturn在此「標籤切換」期間未被調用,所以我無法控制哪個文本字段成爲下一個第一響應者。讓他們專注於正確順序的訣竅是什麼?

+0

可能重複的[如何瀏覽文本字段(下一個/完成按鈕)](https://stackoverflow.com/questions/1347779/how-to-navigate-through-textfields-next-done-buttons) – atulkhatri

+0

請仔細檢查你的'self.textFields'。也許它有錯誤的順序。或者嘗試刪除ref,然後再次連接所需的訂單。 – anhtu

+0

對這個主題的另一個有趣的貢獻:https://stackoverflow.com/a/6177614/6319106 – clemens

回答

0

檢查由indexOfObject:返回的索引。如果數組中有一些相等的對象,則此方法返回其中第一個的索引。

如果該指數是錯誤的,使用的UITextField的標籤屬性是這樣的:

UITextField * nextResponder = [self.textFields objectAtIndex:textField.tag + 1]; 

,或者如果你所有的文本字段都在同上海華:

UITextField * nextResponder = (UITextField*)[textField.superview viewWithTag:textField.tag + 1]; 

蘋果文檔:

從索引0開始,將數組的每個元素作爲參數傳遞給發送給anObject的isEqual:消息,直到找到匹配或達到數組的末尾。如果isEqual對象被認爲是相等的:(在NSObject協議中聲明)返回YES。 https://developer.apple.com/documentation/foundation/nsarray/1417076-indexofobject?language=objc

該方法定義了實例相等的含義。例如,一個容器對象可能定義兩個容器,如果它們的相應對象都對isEqual:request作出了YES響應。有關使用此方法的示例,請參閱NSData,NSDictionary,NSArray和NSString類規範。

如果兩個對象相等,它們必須具有相同的散列值。如果您在子類中定義isEqual:並且打算將該子類的實例放入集合中,則最後一點尤爲重要。確保你也在你的子類中定義了散列。 https://developer.apple.com/documentation/objectivec/1418956-nsobject/1418795-isequal?language=objc

相關問題