2012-08-26 65 views
0

我是iOS和Xcode的新手。我正在用簡單的計算器工作。我有一個表格視圖,其中我通過代碼添加了30個textFields。我給他們分配標籤。resignFirstResponder Dosted work for tagged TextField

然後我製作了NumPad類型textField的鍵盤。爲此,我需要使用工具欄關閉鍵盤。

但是,當我運行該程序與最後一個標籤的textField是dismis鍵盤而其他人不這樣做。我想當我在代碼中提到textField時,它會指定最後一個標記的textField。

我的代碼給出。

for (int i = 0; i < 30; i++) {  
    mainTextField = [[UITextField alloc] initWithFrame:CGRectMake(20, (80 + (i * 60)), 280, 30)];   
    mainTextField.borderStyle = UITextBorderStyleRoundedRect; 
    mainTextField.textColor = [UIColor blackColor]; 
    mainTextField.font = [UIFont systemFontOfSize:17.0]; 
    mainTextField.backgroundColor = [UIColor whiteColor]; 
    mainTextField.autocorrectionType = UITextAutocorrectionTypeNo; 
    mainTextField.backgroundColor = [UIColor clearColor]; 
    mainTextField.keyboardType = UIKeyboardTypeNumberPad; 
    mainTextField.keyboardType=UIKeyboardTypeDecimalPad; 
    mainTextField.returnKeyType = UIReturnKeyDone; 
    mainTextField.tag= i+1; 
    mainTextField.delegate=self; 

     [self->mainTableView addSubview:mainTextField]; 

     self. numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; 
     self. numberToolbar.barStyle = UIBarStyleBlackOpaque; 
     self. numberToolbar.items = [NSArray arrayWithObjects: 
           [[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)], 
           [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
           [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)], 
           nil]; 
     [self.numberToolbar setTag:i+1]; 
     [self.numberToolbar sizeToFit]; 

     mainTextField.inputAccessoryView = numberToolbar; 


     mainTextField.clearButtonMode = UITextFieldViewModeWhileEditing; 

    mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 55+(i*60), 280, 18)]; 
    mainLabel.backgroundColor = [UIColor clearColor]; 
    mainLabel.textAlignment = UITextAlignmentLeft; 
    mainLabel.tag= i+1; 


    { 
     switch ([mainLabel tag]) { 
      case 1: 
       mainLabel.text=[ passedValue objectAtIndex:0]; 
       break; 
      case 2: 
       mainLabel.text=[ passedValue objectAtIndex:1]; 
       break; 
      case 3: 
       mainLabel.text=[ passedValue objectAtIndex:2]; 
       break; 
      case 4: 
       mainLabel.text=[ passedValue objectAtIndex:3]; 
       break; 
      case 5: 
       mainLabel.text=[ passedValue objectAtIndex:4]; 
       break; 
      case 6: 
       mainLabel.text=[ passedValue objectAtIndex:5]; 
       break; 
      case 7: 
       mainLabel.text=[ passedValue objectAtIndex:6]; 
       break; 
      case 8: 
       mainLabel.text=[ passedValue objectAtIndex:7]; 
       break; 
      case 9: 
       mainLabel.text=[ passedValue objectAtIndex:8]; 
       break; 
      case 10: 
       mainLabel.text=[ passedValue objectAtIndex:10]; 
       break; 
      case 11: 
       mainLabel.text=[ passedValue objectAtIndex:11]; 
       break; 
      case 12: 
       mainLabel.text=[ passedValue objectAtIndex:12]; 
       break; 
      case 13: 
       mainLabel.text=[ passedValue objectAtIndex:13]; 
       break; 
      case 14: 
       mainLabel.text=[ passedValue objectAtIndex:14]; 
       break; 
      case 15: 
       mainLabel.text=[ passedValue objectAtIndex:15]; 
       break; 
      case 16: 
       mainLabel.text=[ passedValue objectAtIndex:16]; 
       break; 
      case 17: 
       mainLabel.text=[ passedValue objectAtIndex:17]; 
       break; 
      case 18: 
       mainLabel.text=[ passedValue objectAtIndex:18];  
       break; 
      case 19: 
       mainLabel.text=[ passedValue objectAtIndex:19]; 
       break; 
      case 20: 
       mainLabel.text=[ passedValue objectAtIndex:20]; 
       break; 
      case 21: 
       mainLabel.text=[ passedValue objectAtIndex:21]; 
       break; 
      case 22: 
       mainLabel.text=[ passedValue objectAtIndex:22]; 
       break; 
      case 23: 
       mainLabel.text=[ passedValue objectAtIndex:23]; 
       break; 
      case 24: 
       mainLabel.text=[ passedValue objectAtIndex:24]; 
       break; 
      case 25: 
       mainLabel.text=[ passedValue objectAtIndex:25]; 
       break; 
      case 26: 
       mainLabel.text=[ passedValue objectAtIndex:26]; 
       break; 
      case 27: 
       mainLabel.text=[ passedValue objectAtIndex:27]; 
       break; 
      case 28: 
       mainLabel.text=[ passedValue objectAtIndex:28]; 
       break; 
      case 29: 
       mainLabel.text=[ passedValue objectAtIndex:29]; 
       break; 

      default: 
       break; 
     } 



    [self->mainTableView addSubview:mainLabel]; 
    [self configureView]; 

回答

0

這段代碼有幾個錯誤。

首先,這是而不是如何創建一個包含30個文本字段的表格。相反,您使用UITableView,將其設置爲delegatedataSource到您的視圖控制器並實現所需的方法。其中tableView:numberOfRowsInSection:您將返回30.然後在tableView:cellForRowAtIndexPath:您創建一個單元格,將一個文本字段放入它並返回該單元格。網上有很多關於如何設置表格視圖的教程,您也可以閱讀Apple的文檔。你幾乎沒有向tableView本身添加任何額外的視圖。

self->tableView是錯的。當您想要將指針取消引用到結構並訪問或設置其中一個變量時,在C中使用->表示法(除其他外)。您不要將它與Objective-C對象一起使用。只需編寫self.tableView。如果你正確地聲明瞭你的屬性,這應該工作。

該開關塊是不必要的。你爲什麼不這樣做:

mainLabel.text = [passedValue objectAtIndex[mainLabel tag]-1]; 
+0

我也這麼做。製作了表格視圖,這些文本字段在單元格中。我使用了一個單元格。我改變了 - >符號。謝謝你,但我的textField仍然劑量反應,以解僱行動。最後一個textField是第30個,只關閉鍵盤。請幫忙 。 [mainTextField resignFirstResponder]適用於所有文本域? –

+0

mainLabel.text = [passedValue objectAtIndex [mainLabel tag] -1];這條線不起作用。它會給出錯誤 –

+0

mainLabel.text = [passedValue objectAtIndex:[mainLabel tag] -1]; –

相關問題