2013-06-30 18 views
1

我有一個相對較大的iPhone應用程序與許多意見。 我想在我的鍵盤上實現下一個/上一個選項。 我已經成功地實現了它的UI智能,我看到一些代碼示例在線,但他們都假設我們需要添加代碼到每個視圖控制器來實現文本字段之間的實際轉換。iOS:自動方式來選擇文本字段

我的問題是:是否有一種通用的方法來知道,給定一些文本字段,誰是下一個字段? (即沒有重構我的每個視圖控制器)

我問這個問題,因爲當我使用iPhone模擬器,並按下計算機的Tab鍵 - 字段之間切換髮生,所以我想知道是否有內置或在iOS上實現它的通用方法。

澄清: 有沒有辦法做到這一點,而無需爲每種類型的視圖控制器添加特定的代碼? (添加一個通用代碼是可以接受的)

+0

沒有沒有辦法做到這一點,沒有添加代碼邏輯之間導航領域。 – Geek

+0

您應該將其作爲答案,而不是評論。評論僅供澄清。 – SevenBits

+0

我會澄清一下:有沒有爲每種類型的視圖控制器添加特定代碼的方法? (添加一個通用代碼很好) – Eliktz

回答

2

我想寫我是如何解決這個問題,有給我這裏的很多很好的答案的幫助:)

首先,我不能不管創建創建視圖的標籤完全通用的代碼,它是在。 相反,我創造了這個事情,我認爲這是與firstResponder方法不工作的最通用的解決方案:

  • 我創建自定義工具欄和我的下一個/上/ DONE按鈕和適當的行動代表。
  • 比我擴展UIViewController通過添加類別「選項卡」。這個類聲明瞭一個fieldsArray並實現了委託方法。
  • 現在是每個特定視圖控制器需要做的(進口類別旁邊)是根據其屬性和調用它增加了init方法按鈕工具欄此提供這種fieldsArray字段

我希望你能受益於此,並再次感謝所有好的答案

0

你可以在工具類中使用一個方法,該方法需要一個文本字段和一個viewcontroller作爲參數。那麼您可以使用文本字段的「標籤」屬性來查找該視圖滾動器中的下一個文本字段,假定您已相應地分配了標籤。我想,數字會很棒。 vc中的一個簡單的回調方法可以處理焦點更改。那就像我現在可以看到的一樣。

+0

感謝您的回答。但是使用標籤屬性是我試圖避免的事情之一,因爲我的大部分表都是動態構建的,並且將所有內容都標記爲order是一個有點混亂的過程。 – Eliktz

+0

@Eliktz - 標籤只是一個建議。你可以以任何你喜歡的方式確定下一個領域,機制保持不變。 (例如,您可以使用x-y座標查找下一個字段?) – katzenhut

0

這是我想出了一些通用代碼:

// add a property for the fieldsArray 

//add this in viewDidLoad 
_fieldsArray = [[NSMutableArray alloc] init]; 
NSArray *viewsArray = [self.view subviews]; 
for (id view in viewsArray) { 
    if ([view isKindOfClass:NSClassFromString(@"UITextField")]) { 
     [_fieldsArray addObject:view]; 
    } 
} 

//add this in your action that switches the fields 
for (UITextField *field in _fieldsArray) { 
    if ([field isFirstResponder]) { 
     if ([fieldsArray lastObject] == field) { 
      [_fieldsArray[0] becomeFirstResponder]; 
     }else { 
      NSUInteger nextIndex = [_fieldsArray indexOfObject:field] + 1; 
      [_fieldsArray[nextIndex] becomeFirstResponder]; 
     } 
     break; 
    } 
} 

使用它之前,它應該得到改善。

1)找到self.view遞歸

2所有子視圖)做一些檢查,如果數組是空的或零或在他們只有一個目標。

祝你好運!