2013-03-05 46 views
0

我有一個工作的隨機應用程序。它由10個UITextFields,一個UILabel和一個UIButton組成。 基本思路是填寫UITextFields的用戶名並通過UIButton隨機選擇一個名字。它運作良好,但如果只有6個用戶名加入,那麼其他4 UITextFields呢?我怎樣才能排除它們的隨機列表或數組? 我希望你能幫助我,謝謝你對這件事的看法!如何僅在UILabel中顯示隨機填充的文本字段?

這裏是我的M檔:

 #import "ViewController.h" 

    @interface ViewController() 
    - (IBAction)random:(id)sender; 
    @property (weak, nonatomic) IBOutlet UITextField *naam; 
    @property (weak, nonatomic) IBOutlet UILabel *label; 
    @property (weak, nonatomic) IBOutlet UITextField *naam2; 
    @property (weak, nonatomic) IBOutlet UITextField *naam3; 
    @property (weak, nonatomic) IBOutlet UITextField *naam4; 
    @property (weak, nonatomic) IBOutlet UITextField *naam5; 
    @property (weak, nonatomic) IBOutlet UITextField *naam6; 
    @property (weak, nonatomic) IBOutlet UITextField *naam7; 
    @property (weak, nonatomic) IBOutlet UITextField *naam8; 
    @property (weak, nonatomic) IBOutlet UITextField *naam9; 
    @property (weak, nonatomic) IBOutlet UITextField *naam10; 


    @end 

    @implementation ViewController 

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

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

    - (IBAction)random:(id)sender 
    { 
     int text; 
     text = rand() %10; 
     switch (text) { 
       case 0: 
        self.userName = self.naam2.text; 
        break; 
       case 1: 
        self.userName = self.naam.text; 
        break; 
       case 2: 
        self.userName = self.naam3.text; 
        break; 
       case 3: 
        self.userName = self.naam4.text; 
        break; 
       case 4: 
        self.userName = self.naam5.text; 
        break; 
       case 5: 
        self.userName = self.naam6.text; 
        break; 
       case 6: 
        self.userName = self.naam7.text; 
        break; 
       case 7: 
        self.userName = self.naam8.text; 
        break; 
       case 8: 
        self.userName = self.naam9.text; 
        break; 
       case 9: 
        self.userName = self.naam10.text; 
        break; 
       default: 
        break; 
     } 

     NSString *nameString = self.userName; 
     if ([nameString length] == 0) { 
      nameString = @"Wie?"; 
     } 

     NSString *random = [[NSString alloc] 
        initWithFormat: @"De Bob is....%@!", nameString]; 
     self.label.text = random; 
    } 

    - (BOOL)textFieldShouldReturn: (UITextField *)theTextField { 
     if (theTextField == self.naam) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam2) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam3) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam4) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam5) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam6) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam7) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam8) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam9) { 
      [theTextField resignFirstResponder]; 
     } else if (theTextField == self.naam10) { 
      [theTextField resignFirstResponder]; 
     } 
     return YES; 
    } 

    @end 
+0

歡迎來到stackoverflow。請確保你正確地標記你的問題,不僅僅是這樣,它可以幫助你得到最好的答案,但在將來幫助其他用戶。同時檢查你的代碼格式我已經改正了這個最好的可能性,使它更具可讀性,只要確保我們下次可以閱讀它。我努力理解你的代碼片斷,因爲它們格式錯誤。此外,如果您找到幫助您解決問題的答案,請接受用戶喜歡在那裏獲得功勞。 – Popeye 2013-03-05 16:16:28

回答

0

您應該創建的UITextField運行。

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 200, 300, 40)]; 
textField.borderStyle = UITextBorderStyleRoundedRect; 
textField.font = [UIFont systemFontOfSize:15]; 
textField.placeholder = @"enter text"; 
textField.autocorrectionType = UITextAutocorrectionTypeNo; 
textField.keyboardType = UIKeyboardTypeDefault; 
textField.returnKeyType = UIReturnKeyDone; 
textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;  
textField.delegate = self; 
[self.view addSubview:textField]; 

這將確保沒有不必要的textFields在那裏。

或者,在viewDidLoad方法中將每一個隱藏爲YES。並根據玩家數量設置隱藏到NO。

+0

感謝您的回答Anoob,我是一個非常新手在obj C,所以原諒我,如果我不明白如何創建UITextfields運行時,你有一個例子嗎? – jOnoMato 2013-03-12 10:52:10

+0

查看更新的答案。 – 2013-03-12 11:03:43

+0

再次感謝Anoop爲您的快速回復,我會讓你知道如果這個工程,問候Jonomato – jOnoMato 2013-03-12 14:31:20

0

我可以建議你首先創建一個NSMutableArrayNSArray,具體取決於實現,只包含填充的用戶名的值,然後使用randomIndex = arc4random() % [theArray count];從數組中選擇一個名稱。

這裏是一個可能的實現,但不是最優:

NSMutableArray *usernamesList = [NSMutableArray array]; 

for (UIView *view in [self.view subviews]) { 
    if ([view isKindOfClass:[UITextField class]]) { 
     UITextField *textField = (UITextField *)view; 
     if (![textField.text isEqualToString:@""]) { 
      [usernamesList addObject:view]; 
     } 
    } 

    NSUInteger index = arc4random() % [usernamesList count]; 
    NSLog(@"The chosen name is %@", [usernamesList objectAtIndex:index]); 
} 

爲了能夠僅通過文本框的用戶名重複,一個更好的解決方案是使用IBOutletCollection

+0

爲了更好的隨機重分區,首選使用'arc4random_uniform()'。 – Zaphod 2013-03-05 15:57:20

+0

謝謝你的回答Zaphod,既然你的建議需要一些時間來測試,我可以稍後給你結果 – jOnoMato 2013-03-12 10:43:24

0

只是做一個對循環並檢查該標籤的文本是否爲空,如下所示: int count = 0;如果(textf isKindOfClass:[UITextField class]){(text [textf text] isEqualToString:@「」] {0121} {textf setText:@「一些字符串「]; textf.tag =計數; 計數++;} ] }

在這之後,只得到一個隨機數: NSUInteger指數= arc4random()%[陣列計數];

如果你想得到十個隨機數字,只要把它放在一個for循環中即可。

for(int i = 0; i < 10; i++){ 
    NSUInteger index = arc4random() % [array count]; 
    //Loop through text fields again and get the one with the tag that matches the random number 
} 

對於in循環來說非常方便,因爲您不必爲迭代器設置正常的循環,而且您也不必知道迭代的對象的數量。這一切都照顧你。

+0

謝謝你的回答,影子。我嘗試過但失敗了。我必須承認我缺乏對Xcode的理解,因此我在這方面很新手。 – jOnoMato 2013-03-12 10:49:22

+0

在這裏,我會用一些更多示例代碼編輯我的答案,以便您更好地瞭解要做什麼。 – barndog 2013-03-12 17:06:10