2011-07-11 128 views
1

品牌新的編碼;幾個月來一直在宗教上利用stackoverflow;第一次提問;請溫柔。使用for循環以編程方式創建多個UITextField

我正在嘗試使用for循環以編程方式創建一系列UITextFields。這些字段應該有「pax1name」,「pax2name」,「pax3name」等名稱。

我缺少的是如何獲取字符串並將其作爲textField的名稱, textField每次執行for循環。

這是我的代碼,但也許我正在做這個錯誤的方式?先謝謝你!

// set up the names textfields 
for (int i = 0; i < 7; i++) { 
    NSString *fieldName = [[NSString alloc] initWithFormat:@"pax%iname", (i + 1)]; 

    // I can't figure out what goes here to create a UITextField with the name of fieldName 

    textField = [[UITextField alloc] initWithFrame:CGRectMake(15, (15 + (i * 40)), 400, 40)]; 
    textField.borderStyle = UITextBorderStyleRoundedRect; 
    textField.font = [UIFont systemFontOfSize:15.0]; 
    textField.autocorrectionType = UITextAutocorrectionTypeNo; 
    textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 

    [namesViewController addSubview: textField]; 

    [fieldName release]; 
    [textField release]; 
} 
+0

+1對於你的第一個SO問題是完整的,清晰的,幷包括代碼。做得好。 –

+0

@DanRay謝謝!這一切都歸功於我昨晚在Holiday Inn Express酒店住宿...... – wannabeacoder

回答

1

通常你使用UIView屬性tag。在循環中使用[textField setTag:<youCustomTag>]來設置值,例如你的變量i。請注意,tag期望一個NSUInteger而不是一個NSString。

要想訪問正確的文本字段,請致電[[namesViewController view] viewWithTag:<yourCustomTag>]

但是,是否真的有必要爲您的視圖控制器創建多個文本字段?通過只創建一個文本字段並在用戶點擊一行時按需設置標籤屬性,可能會有更優雅的解決方案。我不知道這是否適合你。

+0

感謝所有幫助過我的人!這個答案是最有用的,所以我接受它。我會發布我最終做的事,以防其他人發現它有用。 – wannabeacoder

+0

不客氣。我編輯了代碼示例,因爲您必須爲其viewWithTag:調用namesViewConroller的視圖。 –

1

我認爲你一直在錯誤的方式。 UITextField沒有名爲「name」的屬性。要識別控件,您可以使用它的tag屬性。請參閱此代碼:

for (int i = 0; i < 7; i++) { 

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(...)]; 
    textField.tag = i + 1; 
    ... 
} 
0

UITextFields不具有名稱。您可能來自HTML世界,這些東西基本上是名稱 - 值對的大雜湊。不像可可觸摸那樣。正如@Florian Mielke所說,他們每個人都有一個int .tag屬性,這可能是你想要設置的。

1

當你說出文本字段的名稱時,我假設你的意思是變量名而不是設置顯示的文本。即你想在一個循環中創建變量,但稍後可以通過名稱單獨引用它們。

在這種情況下,你不能做你想做的事情。你可以做的就是將它們粘在一個數組中,以便稍後訪問。

NSMutableArray *paxNameFields = [[NSMutableArray alloc] init]; // before your loop 
[paxNameFields addObject: textField]; // inside the loop 
[paxNameFields objectAtIndex: 5]; //sometime later use the 6th field 

或者,如果你只是想能夠識別的UITextField你傳入一個委託回調以後,你可以設置/查看tag屬性。

相關問題