2013-10-23 100 views
2

我想了很多天,現在設置和得到輸入UITextFields部分的單元格。UITableView部分與UITextFields

在我的第一個視圖中,我去了一個UITextField,在那裏我說我想要有多少節,當按下一個按鈕時,它給了我UITableView中的那些節(4行)。 我現在的問題是,我沒有得到每個UITextField的正確值。

例如:

  • 所有部分具有4個文本框在文本框
  • 在可以寫入整數或浮點數
  • 當我知道從文本字段1和2中的int,我將它們劃分...

這裏是我的代碼....

#import "ViewController.h" 

@interface ViewController() 
{ 
    NSMutableArray *sectionsArray; 
    NSMutableArray *rowsArray; 
    NSMutableArray *textFieldArray; 
} 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. 

    [[self myTableView]setDelegate:self]; 
    [[self myTableView]setDataSource:self]; 

    sectionsArray = [[NSMutableArray alloc]init]; 
    rowsArray = [[NSMutableArray alloc]initWithObjects:@"",@"",@"",@"", nil]; 
    textFieldArray = [[NSMutableArray alloc]initWithObjects:@"",@"",@"",@"", nil]; 

} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.myTableView reloadData]; 
} 


- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - Table View 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 

    int anzahl = [_AnzahlStationen intValue];//from first view...anzahl=quantity of sections 

    //adds sections 
    do { 

     [sectionsArray addObject:[NSString stringWithFormat:@"Palette %lu",sectionsArray.count+1]]; 

    } while ([sectionsArray count] < anzahl); 

    return sectionsArray.count; 
} 


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    return rowsArray.count; 
} 


-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    return [sectionsArray objectAtIndex:section]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
    if (cell==nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 

     UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 300, 24)]; 
     textField.font = [UIFont fontWithName:@"Gujarati Sangam MN" size:15]; 
     textField.textColor = [UIColor redColor]; 

     textField.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
     textField.tag = 17; 
     [cell.contentView addSubview:textField]; 
     textField.delegate = self; 
    } 

    UITextField *textField = (UITextField *)[cell.contentView viewWithTag:17]; 

    textField.text = [textFieldArray objectAtIndex:indexPath.row]; 

    return cell; 
} 

#pragma mark - UITextFieldDelegate 

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

- (void)textFieldDidEndEditing:(UITextField *)textField { 

    [textFieldArray replaceObjectAtIndex:0 withObject:textField.text]; 
} 

@end 

如何在正確的行中替換正確的UITextField?

+0

理想情況下,您不應該在數據源回調中將對象添加到數據源中。爲什麼不在viewDidLoad中做到這一點?你的問題很難理解你在問什麼。 – Tim

+0

因此,首先我應該在viewdidload中添加部分? – user2912794

+0

在別處創建所有部分數據,然後您的委託回調可以通過這種方式檢索計數。根據你的實際問題,我仍然不明白 – Tim

回答

1

我建議你使用類似下面的數據源:

NSMutableArray *tableViewData = [NSMutableArray array]; 

[tableViewData addObject:@[ @{@"textfield" : YourTextField} ]]; 
[tableViewData addObject:@[ @{@"textfield" : YourTextField} ]]; 
[tableViewData addObject:@[ @{@"textfield" : YourTextField} ]]; 
[tableViewData addObject:@[ @{@"textfield" : YourTextField} ]]; 

上面的代碼表示tableViewData,含有4個陣列,每個陣列包含一個詞典,其將保持所述數據爲單細胞。在我的示例中,我剛剛使用了一個UITextField的單個鍵值對。

你可以動態創建這個,不過你喜歡,你的委託和數據源方法可以讀取它。而不是有3個獨立的陣列。

E.g.

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return [tableViewData count]; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [[tableViewData objectAtIndex:section] count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *cellData = [[tableViewData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 

    // Create your cell and use the data stored in the dictionary 
} 

通過使用上面的方法,你可以更新該字典,並在一個地方保持狀態所有UITableView,而且它保持代碼整齊和可讀性。要訪問任何UITextField,只需在UITableView數據源和委託方法的字典中找到它。

希望這會有所幫助!

+0

非常感謝!我會在下班後看看,我需要一些時間來解決這個問題... – user2912794

+0

一切工作正常,直到現在,我得到我的章節標題和它的數字,但現在我不明白我是如何得到從textfields以及如何將它們保存在文本框中,以便在滾動視圖時不會丟失它們。 – user2912794

+0

您更新NSDictionary中TextField內部的文本,並從willDisplayCell中讀取該文本,這樣您在滾動時就不會丟失。 – Tim