2012-12-19 45 views
0

我有一個基於JSON構建的數組的動態數量的單元格的tableview。用tableviewcell的輸入構建一個數組UITextfield

tableData = [NSJSONSerialization JSONObjectWithData:dataWebService options:kNilOptions error:&error]; 

這小小的一行獲取我需要建立我的tableview的所有數據。

在tableview中,我在每個單元格中都有一個textfield,它帶有來自我的JSON的預定義文本。用戶可以在進入下一個segue(storyboard)之前更改此值。

問題是,我可以將這個usertyped值存儲在一個數組中,在我將這個arraobobject發送到下一個segue之前,替換我的tableData數組中的excisting values。

請注意,當用戶在tableview中滾動時,用戶輸入不得改變。

也許這是基本的,但我不能想出一個很好的方法來做到這一點。

這是JSON的一個例子。

(
    { 
    defaultval = 8; 
    dtype = long; 
    id = "@franr"; 
    label = "Faktura nr."; 
}, 
    { 
    defaultval = 8; 
    dtype = long; 
    id = "@tilnr"; 
    label = "Til faktura"; 
} 

的實現代碼如下這個樣子的: (我不能發表圖片)

弗拉faktura 8 胡麻faktura 8

用戶可以更改值(8號)以任何數字。所以我需要替換JSON數組中的defaultVal數。

謝謝。

回答

0

由於其爲UITextField,你可以使用OnTextChange事件

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range  
        replacementString:(NSString *)string 

,或者失去焦點

- (BOOL)textFieldShouldReturn:(UITextField *)textField 

請記住,你需要設置委託將textfield添加到自我&中添加相應的協議。

0

爲了在滾動後保留數據,您應該在每次來自用戶的輸入後修改數據源(數組)。您可以在UITextFieldDelegate的textFieldDidEndEditing:方法中完成dis(當然,您必須是每個文本字段的代表:textField.delegate = self;)。 您還應實現一個UIScrollViewDelegate方法,用於在表開始滾動時關閉鍵盤(例如scrollViewWillBeginDragging:)。

編輯:

你的數組必須包含NSDictionaries,這是不可變的,所以我建議,您創建具有這些屬性自己的類(defaultval,D類......),所以你可以編輯數據源。我不認爲你可以按照現在的方式修改你的陣列。

與自定義對象的代碼會是這樣的:

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    UITableViewCell *cell = textField.superview.superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    MyObject *currentObject = [tableData objectAtIndex:indexPath.row]; 
    currentObject.defaultVal = textField.text.intValue; 
} 
+0

Okei。但是,如何用te用戶輸入的新值更新主陣列? –

+0

我明白了。我會試一試,並在測試時作出迴應。謝謝。 –