2013-12-12 85 views
0

我在UItableView中有一些UITextfields。文本字段已經在我創建的UITableViewCell中進行了分類。在按下鍵盤上的返回鍵後,我會知道如何進入下一個單元格。跳轉到下一個UItextField

因此,如果用戶是開始寬,他們將繼續向下寬度科拉姆,或者如果他們想進入高度每次他們打的時間進入,他們將繼續沿着列。

目前發生了什麼是如果我使用寬度科拉姆,它工作正常,但如果我按下回車鍵後選擇一個高度的UITextField它跳轉到下一個單元格的寬度。

這是我檢測返回鍵的代碼。

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [[self.view viewWithTag:textField.tag+1] becomeFirstResponder]; 
    return YES; 
} 

這就是我的單元格tableview的樣子。

enter image description here

任何幫助,將不勝感激。

欲瞭解更多信息,這是我如何將自定義celltextfields添加到UItextfield。

NSString *widthString = [currentFinishingDictionary objectForKey:@"w"]; 
    if ((NSNull *) widthString != [NSNull null]) { 
     cell.widthTexField.text = widthString; 
     cell.widthTexField.delegate = self; 
     cell.widthTexField.tag = indexPath.row; 
    } else { 
     cell.widthTexField.text = @" "; 
     cell.widthTexField.delegate = self; 
     cell.widthTexField.tag = indexPath.row; 
    } 

    NSString *heightString = [currentFinishingDictionary objectForKey:@"h"]; 
    if ((NSNull *) heightString != [NSNull null]) { 
     cell.heightTextField.text = heightString; 
     cell.heightTextField.delegate = self; 
     cell.heightTextField.tag = indexPath.row; 
    } else { 
     cell.heightTextField.text = @" "; 
     cell.heightTextField.delegate = self; 
     cell.heightTextField.tag = indexPath.row; 
    } 
+0

單個單元格是否包含1個寬度文本字段和1個高度文本字段? – sanjaymathad

+0

是的,它的劑量.... – HurkNburkS

回答

0

請確保您已設置標籤UITextField

你應該嘗試這種方式:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    //[[self.view viewWithTag:textField.tag+1] becomeFirstResponder]; 
    // Get here you cell seleted Refrecne 
     id obj = [cell.contentView viewWithTag:textField.tag+1]; 

     if([obj isKindOfClass:[UITextField class]]) { 
     UITextField *nextField = (UITextField*)obj 
     [nextField becomeFirstResponder]; 
    } 
    return YES; 
} 

或者你可以使用ELCTextFieldCell

其內容的UITextField和的UILabel在一個細胞。您可以根據需要定製。

+0

obj在這種情況下返回零。 coudl是因爲我subclassed UItableViewCell?我也會使用ELCTextFieldcell,但是由於其他視圖以及表格本身的複雜性,我致力於UITavleview ..除了這兩個文本字段外,還有更多內容。當你的子類化單元格時,明智的UITabeViews也很棒。 – HurkNburkS

+0

如果'obj'爲零。那麼你應該檢查你是否給出了確切的標籤值?確保用戶點擊UITextField時能夠獲得正確的單元格實例。如果UITableView中有很多東西,那麼最好使用不同的單元標識符。 –

0

可以使用

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


UITableViewCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+1 inSection:0]]; 
UITextField *tf = (UITextField*)[cell viewByTag:textField.tag+1] 
[tf becomeFirstResponder]; 
     return YES; 
    } 
0

我認爲這個問題可能是在標籤被分配到UITextFields的方式。

請檢查標籤值是否實際上是您的假設。

+0

我給他們分配了兩個indexpath.row編號,用於標記問題。我不知道該怎麼辦。 – HurkNburkS

+0

其實..如果我加0.5到安裝標籤它應該工作我htink ..不。 – HurkNburkS

+1

我想這意味着有兩個TextFields具有相同的標籤。如果是這種情況,您可以考慮給寬度文本字段編號100,101.102 ..等等和高度字段1000,1001,1002,1003 ..等即添加額外100或1000,同時設置標籤。它可能解決你的問題。 – iOsDude

0
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     [yourtextfield resignFirstResponder]; 
     // save state, etc if necessary 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MyCell * cell = (MyCell *)[tableView cellForRowAtIndexPath:indexPath]; 
    self.selectedField = cell.tf; // cell.tf is a UITextField property defined on MyCell 
    [yourtextfield becomeFirstResponder]; 
} 
0

你有沒有嘗試使用替代的tableview的CollectionView,收集意見的設計可以製成類似於您添加的圖片,你可以在一個單元格添加一個文本框,然後做出寬度文本字段第一個響應者做這個

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
if ([tableView.dataSource tableView:tableView numberOfRowsInSection:0] > tag + 2) 
     CustomCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+2 inSection:0]]; 

     [cell.textField becomeFirstResponder]; 

} 

,如果你想仍然採用這種設計仍然存在,那麼你可以做到這一點

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

    int xPosition = (int)textField.frame.origin.x; 

    CustomCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+1 inSection:0]]; 

    if((int)cell.textField1.x == xPosition) 
    { 
      [cell.textField1.x becomeFirstResponder]; 

    } 
    else 
    { 
      [cell.textField2.x becomeFirstResponder]; 
    } 

}

代碼未編譯。只有邏輯寫。希望它有幫助:)

0

更改您的分配標記值,如下所示,可能會對您有所幫助。

NSString *widthString = [currentFinishingDictionary objectForKey:@"w"]; 
    if ((NSNull *) widthString != [NSNull null]) { 
     cell.widthTexField.text = widthString; 
     cell.widthTexField.delegate = self; 
     cell.widthTexField.tag = indexPath.row; 
    } else { 
     cell.widthTexField.text = @" "; 
     cell.widthTexField.delegate = self; 
     cell.widthTexField.tag = indexPath.row; 
    } 

    NSString *heightString = [currentFinishingDictionary objectForKey:@"h"]; 
    if ((NSNull *) heightString != [NSNull null]) { 
     cell.heightTextField.text = heightString; 
     cell.heightTextField.delegate = self; 
     cell.heightTextField.tag = indexPath.row + 2000; 
    } else { 
     cell.heightTextField.text = @" "; 
     cell.heightTextField.delegate = self; 
     cell.heightTextField.tag = indexPath.row + 2000; 
    } 

現在您的textfields標記如下所示,並可以按照您的要求工作。現在

0 2000 
1 2001 
2 2002 
3 2003 
4 2004 
.. ........ 

你的方法能正常工作,但需要考慮其他的想法,以及因爲這會錯了,當你有2000個細胞。

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    // i.e. textField.tag == 6 then next 6 + 1 == 7 
    // i.e. textField.tag == 20006 then next 2006 + 1 == 2007 
    [[self.view viewWithTag:textField.tag+1] becomeFirstResponder]; 
    return YES; 
}