2014-11-03 133 views
0

我在我的一個項目中使用onegray的單選按鈕類。這裏提到的一個:Best radio-button implementation for IOS單選按鈕問題

我在測驗中使用這些單選按鈕作爲我的答案選項。當用戶點擊下一個按鈕時,標籤會被填入新的選項。唯一的問題是舊的不會消失。所以當我點擊下一個時,新的一組按鈕放在舊的按鈕上。

什麼是最先檢查它們是否已經存在的最簡單的方法,如果是的話......在顯示新的之前刪除它們?

這是我的代碼。

@interface LABViewControllerQuiz() 

@end 

@implementation LABViewControllerQuiz 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 
int counter =0; 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    _fileContents = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"quizQuestions" ofType:@"txt"] encoding:NSUTF8StringEncoding error: nil]; 
    _theScanner = [NSScanner scannerWithString:_fileContents]; 
    _separator = [NSCharacterSet characterSetWithCharactersInString:@"~"]; 
    _lineBreak =[NSCharacterSet characterSetWithCharactersInString:@"@"]; 
    _alreadyGeneratedNumbers =[[NSMutableArray alloc]init]; 
    _numQuestions =0; 
    _userAnswers = [[NSMutableArray alloc]init]; 
    _answerKey = [[NSMutableArray alloc]init]; 

    [self nextQuestion:nil]; 

} 

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

/* 
#pragma mark - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
// Get the new view controller using [segue destinationViewController]. 
// Pass the selected object to the new view controller. 
} 
*/ 


- (IBAction)nextQuestion:(UIButton *)sender 
{ 
    _NextQuestionButton.enabled = YES; 
    _submitButton.enabled = NO; 
    NSLog(@"NumQuestion = %d", _numQuestions); 
    if (_numQuestions >9) 
    { 
     _NextQuestionButton.enabled = NO; 
     _submitButton.enabled = YES; 
    }else 
    { 
     int r = arc4random() %20; 
     while ([_alreadyGeneratedNumbers containsObject:[NSNumber numberWithInt:r]]) 
     { 
      r = arc4random() %20; 
     } 
     [_alreadyGeneratedNumbers addObject:[NSNumber numberWithInt:r]]; 


     while(![_theScanner isAtEnd]) 
     { 
      NSLog(@"Location= %d", [_theScanner scanLocation]); 
      NSLog(@"Already Generated numbers:"); 
      int i =0; 
      while (i < [_alreadyGeneratedNumbers count]) 
      { 
       NSLog(@"%@", [_alreadyGeneratedNumbers objectAtIndex:i]); 
       i++; 
      } 

      NSString *line; 
      _lineArray = [[NSMutableArray alloc] init]; 
      [_theScanner scanUpToCharactersFromSet:_lineBreak intoString:&line]; 
      [_theScanner setCharactersToBeSkipped:_lineBreak]; 
      NSScanner *inner = [NSScanner scannerWithString:line]; 
      NSString *word; 
      int wordCount = 0; 
      NSLog(@"r = %d counter = %d", r, counter); 
      if (counter ==r) 
      { 
       while(![inner isAtEnd]) 
       { 
        [inner scanUpToCharactersFromSet:_separator intoString:&word]; 
        [inner setCharactersToBeSkipped:_separator]; 
        [_lineArray insertObject:word atIndex:wordCount]; 
        _questionText.text = [NSString stringWithFormat:@"Question %d \n %@", _numQuestions +1,[_lineArray objectAtIndex:0]]; 
        wordCount++; 
        [_theScanner setScanLocation:0]; 
        counter = 0; 

       } 

       [sender setHidden:YES]; 
       NSMutableArray* buttons = [NSMutableArray arrayWithCapacity:4]; 
       CGRect btnRect = CGRectMake(25, 420, 300, 30); 
       for (NSString* optionTitle in @[[_lineArray objectAtIndex:1], [_lineArray objectAtIndex:2], [_lineArray objectAtIndex:3], [_lineArray objectAtIndex:4]]) 
       { 
        RadioButton* btn = [[RadioButton alloc] initWithFrame:btnRect]; 
        [btn addTarget:self action:@selector(onRadioButtonValueChanged:) forControlEvents:UIControlEventValueChanged]; 
        btnRect.origin.y += 40; 
        [btn setTitle:optionTitle forState:UIControlStateNormal]; 
        [btn setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal]; 
        btn.titleLabel.font = [UIFont boldSystemFontOfSize:17]; 
        [btn setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
        [btn setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 
        btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
        btn.titleEdgeInsets = UIEdgeInsetsMake(0, 6, 0, 0); 
        [self.view addSubview:btn]; 
        [buttons addObject:btn]; 
       } 


       [buttons[0] setGroupButtons:buttons]; // Setting buttons into the group 

       [buttons[0] setSelected:NO]; // Making the first button initially selected 

       NSLog(@"the question is = %@", [_lineArray objectAtIndex:0]); 
       //NSLog(@"Line arrayINDEX %d = %@", wordCount,[_lineArray objectAtIndex:wordCount]);    _numQuestions ++; 
       break; 
      }else 
      { 
       counter ++; 
      } 

     } 
    } 
    [_answerKey addObject:[_lineArray objectAtIndex:5]]; 

} 

-(void) onRadioButtonValueChanged:(RadioButton*)sender 
{ 
    // Lets handle ValueChanged event only for selected button, and ignore for deselected 
    if(sender.selected) 
    { 
     NSLog(@"Selected: %@", sender.titleLabel.text); 

    } 
} 
+0

注:創建按鈕的代碼實際上是直接從Onegray的單選按鈕示例項目。 – CDavis10 2014-11-03 18:18:06

+0

由於這完全是關於onegray的代碼,你不應該問一個灰姑娘嗎? – matt 2014-11-03 18:19:25

+0

我發佈了他的github上的問題..沒有迴應。 – CDavis10 2014-11-05 16:11:13

回答

0

保存buttons作爲實例變量。您已經將所有按鈕添加到數組中,只是出於某種原因將該數組拋出。

@interface LABViewControllerQuiz() 
@property (strong) NSMutableArray *buttons; 
@end 

然後將此行:

NSMutableArray* buttons = [NSMutableArray arrayWithCapacity:4]; 

變爲這些行:

if (self.buttons) { 
    [self.buttons makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    [self.buttons removeAllObjects]; 
} else { 
    self.buttons = [NSMutableArray arrayWithCapacity:4]; 
} 
+0

這並不奏效。 – CDavis10 2014-11-05 15:49:15

+0

請描述什麼不適用於它。 – 2014-11-05 15:54:41

+0

我甚至在方法的開始處檢查是否有_buttons中有任何東西..並刪除所有對象。它仍然是這樣看起來像這樣:http://gyazo.com/2523960e2c1449f8d45cf7c5df3e476d – CDavis10 2014-11-05 15:58:10