2015-12-24 52 views
1

我正在使用TableView中的自定義單元格。我的Tableview有5行,我正在重複使用單元格5次,單元格有Textfield。我需要瀏覽tableview中的文本框並按下鍵盤上的下一個按鈕。 請幫幫我。在UITableView中導航文本字段

在此先感謝。

+0

你真正想要當你按下一個按鈕做什麼樣的行動? –

+0

我需要轉到下一個按鈕 – Naveen

+0

按下tableview中的下一個文本框,爲單元格中的每個uitextfield賦予標籤。與下一個按鈕按下使其他文本域成爲FirstResponder – vaibby

回答

0

通常textFieldShouldReturn方法用於此目的。下面是一個示例。您需要修改它以在您的代碼中使用。在你打算寫這個方法的類,這個類的對象必須爲那些文本框

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

     if (textField == <textField1>) { 
      [<textField2> becomeFirstResponder]; 
     } 
     else if (textField == <textField2>) { 
      [<textField3> becomeFirstResponder]; 
     } 
     else { 

     } 
     return YES; 
    } 
+0

這是不正確的。在視圖內的一般情況下是可能的。但是在每個單元格中,只有您可以單獨根據indexpath從一個字段跳出到另一個字段。 –

+0

是的,正確的。這就是爲什麼我說它只是一個要使用的方法的樣本,OP必須對其進行修改。 – san

+0

我需要通過給予等於indexpath.row的標籤來識別文本字段。我正在寫一個文本框內的塊應該返回的方法,我在主控制器中調用它。 – Naveen

0

使用此方法時ü年底編輯文本字段,以便檢查特定的文本框和navigate-(無效)設置爲delegate textFieldDidEndEditing:(*的UITextField)文本框

而且在返回您可以導航 文本字段 - (BOOL)textFieldShouldReturn:(*的UITextField)文本框

1

試試這個

我想你應該嘗試TPKeyboard來處理UITextfieldsUITableView

希望它有幫助。

0

首先將視圖場景的類更改爲故事板中的視圖控制器。
首先讓您的自定義單元格的標識符爲cell(在我的情況下)。
把文本字段和設置標記101(在我的情況)。
繼承UITextFieldDelegate和鍵盤工具欄值是這樣的:

@interface TableViewController() <UITextFieldDelegate> 
@property (nonatomic, strong) UITextField* textField1; 
@property (nonatomic, strong) UITextField* textField2; 
@property (nonatomic, strong) UITextField* lastTextField; 
@property (nonatomic, copy) NSString* string1; 
@property (nonatomic, copy) NSString* string2; 
@property (nonatomic, strong) UIToolbar* keyboardToolbar; 
@end 

在下面viewDidLoad方法寫代碼:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // 
    self.keyboardToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; 
    self.keyboardToolbar.barStyle = UIBarStyleBlackTranslucent; 
    self.keyboardToolbar.items = @[[[UIBarButtonItem alloc]initWithTitle:@"Cancel" 
                    style:UIBarButtonItemStylePlain 
                    target:self 
                    action:@selector(cancelNumberPad:)], 
    [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
               target:nil 
               action:nil], 
    [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone 
                target:self 
                action:@selector(doneWithNumberPad:)]]; 
    [self.keyboardToolbar sizeToFit]; 
} 

和實施這些方法:

-(void)cancelNumberPad:(id)sender { 
    [self.lastTextField resignFirstResponder]; 
} 

-(void)doneWithNumberPad:(id)sender { 
    if(self.lastTextField == self.textField1) { 
     [self.textField2 becomeFirstResponder]; 
    } else { 
     [self.lastTextField resignFirstResponder]; 
    } 
} 

和寫入單元初始化代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

    UITextField* textField = [cell viewWithTag:101]; 
    textField.inputAccessoryView = self.keyboardToolbar; 
    textField.delegate = self; 

    if(0 == indexPath.section && 0 == indexPath.row) { 
     self.textField1 = textField; 
    } else if(0 == indexPath.section && 1 == indexPath.row) { 
     self.textField2 = textField; 
    } 

    return cell; 
} 

現在我們已經實現UITextFieldDelegate方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if(textField == self.textField1) { 
     self.string1 = [self.string1 stringByReplacingCharactersInRange:range withString:string]; 
    } else if(textField == self.textField2) { 
     self.string2 = [self.string2 stringByReplacingCharactersInRange:range withString:string]; 
    } 
    return YES; 
} 

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    self.lastTextField = textField; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [self doneWithNumberPad:nil]; 
    return YES; 
}