2012-09-30 105 views
1

我已編程嵌入每個的UITableViewCell一個UISlider,但我注意到,這些UISliders的第一2總是損壞如下所示在圖像中。UISlider損壞

enter image description here

的UISlider的按鈕的一部分被留下當我滑到了第一次落後。有沒有其他人遇到同樣的問題?請告訴我,如果你需要看我的代碼。

除了這個問題,連接到UISlider旁邊效果很好的的UILabel。

更多細節: 我的cellForRowAtIndexPath功能如下。請查看添加UISlider的部分的第二段。我也懷疑我可能在單元格中添加了多個滑塊。我檢查了每一個滑塊僅被通過檢查的NSLog輸出線加一次:

NSLog(@"initiating slider at section %d row %d", indexPath.section, indexPath.row); 

部分和行的每個組合是獨一無二的!

我也覺得很奇怪,只有在頂部2行UISliders得到受此影響,無論我在我的表tableViewCell-行數。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
//creating a basic valid cell object 
static NSString *cellIdentifier = @"ActivitiesTVCcell"; 
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

if (!cell){ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
} 

if(indexPath.section == 0){ 
    NSArray *rowNames = [self.phpReply_ActivitiesTVC componentsSeparatedByString:@"\n"]; 
    cell.textLabel.text = [rowNames objectAtIndex:indexPath.row+2]; 
} 
else if (indexPath.section == 1){ 
    if (indexPath.row == 0) { 
     cell.textLabel.text = @"Seated"; 
    } 
    else if (indexPath.row == 1){ 
     cell.textLabel.text = @"Standing"; 
    } 
} 

cell.selectionStyle = UITableViewCellSelectionStyleNone; 



//start code addition of graph button stuff 
UIButton *graphButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[graphButton setFrame:CGRectMake(224, 0, 43, 37)]; 
[graphButton setBackgroundImage:[[UIImage imageNamed:@"graph icon.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:1.0] forState:UIControlStateNormal]; 
[graphButton setBackgroundImage:[[UIImage imageNamed:@"graph icon.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:1.0] forState:UIControlStateSelected]; 

[graphButton addTarget:self 
       action:@selector(graphButtonPressed:) 
     forControlEvents:UIControlEventTouchUpInside]; 
[cell addSubview:graphButton]; 
//end code addition of graph button stuff 


//start code addition of video button stuff 
UIButton *videoButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[videoButton setFrame:CGRectMake(300, 0, 43, 37)]; 
[videoButton setBackgroundImage:[[UIImage imageNamed:@"videoicon.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:1.0] forState:UIControlStateNormal]; 
[videoButton setBackgroundImage:[[UIImage imageNamed:@"videoicon.png"] stretchableImageWithLeftCapWidth:1.0 topCapHeight:1.0] forState:UIControlStateSelected]; 

[videoButton addTarget:self action:@selector(videoButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
[cell addSubview:videoButton]; 
//end code addition of video button stuff 


//start code for addition of enable switch 
UISwitch *activityEnableSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(376, 7, 0, 0)]; //size components of CGRect are ignored 
[activityEnableSwitch setOn:NO animated:YES]; 
[activityEnableSwitch addTarget:self 
         action:@selector(enableSwitchStateChanged:) 
       forControlEvents:UIControlEventValueChanged]; 
[cell addSubview:activityEnableSwitch]; 
//end code for addition of enable switch 

//start code for addition of target angle text field 
UITextField *targetAngleTextField = [[UITextField alloc] initWithFrame:CGRectMake(476, 7, 50, 25)]; 
targetAngleTextField.borderStyle = UITextBorderStyleRoundedRect; 
targetAngleTextField.font = [UIFont systemFontOfSize:15]; 
targetAngleTextField.textColor = [UIColor blackColor]; 
targetAngleTextField.placeholder = @"30"; 
targetAngleTextField.autocorrectionType = UITextAutocorrectionTypeNo; 
targetAngleTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
targetAngleTextField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 
targetAngleTextField.keyboardType = UIKeyboardTypeNumberPad; //no num pad on ipad :(
//[targetAngleTextField becomeFirstResponder]; 
targetAngleTextField.delegate = self; 

[cell addSubview:targetAngleTextField]; 
//end code for addition of target angle text field 

//start code for addition of degree text label 
UILabel *degreeLabel = [[UILabel alloc] initWithFrame:CGRectMake(532, 6, 10, 10)]; 
degreeLabel.text = @"o"; 
degreeLabel.font = [UIFont systemFontOfSize:10]; 
[cell addSubview:degreeLabel]; 
//end code for addition of degree text label 

//start code for addition of progression level UISlider 
NSLog(@"initiating slider at section %d row %d", indexPath.section, indexPath.row); 
UISlider *progressionLevelSlider = [[UISlider alloc] initWithFrame:CGRectMake(576, 7, 150, 25)]; 
progressionLevelSlider.minimumValue = 0; 
progressionLevelSlider.maximumValue = 9; 
progressionLevelSlider.continuous = YES; 
progressionLevelSlider.value = 3; 

[progressionLevelSlider addTarget:self 
      action:@selector(progressionSliderValueChanged:) 
forControlEvents:UIControlEventValueChanged]; 

[cell addSubview:progressionLevelSlider]; 
//end code for addition of progression level UISlider 

//start code for addition of level ? text label 
UILabel *progressionLevelLabel = [[UILabel alloc] initWithFrame:CGRectMake(782, 13, 10, 20)]; 
progressionLevelLabel.text = [NSString stringWithFormat:@"%d", 2]; 
progressionLevelLabel.font = [UIFont systemFontOfSize:17]; 
progressionLevelLabel.tag = 121; //tag represents this particular UIlabel, so that we can set it from outside this function. 
[cell addSubview:progressionLevelLabel]; 
//end code for addition of level ? text label 


[cell setTag:(indexPath.section)*100+indexPath.row]; 

return cell; 
} 

這是我的sliderValueChanged函數。我將這段代碼放在這裏,因爲只有在拖動滑塊(改變它的值)後才能看到'腐敗'。

-(void)progressionSliderValueChanged: (UISlider *)sender { 
int section = ([sender superview].tag)/100; 
int row = [sender superview].tag%100; 

int value = sender.value; 

NSLog(@"slider value at section %d row %d was slided to %d",section, row, value); 

UITableViewCell *superViewOfSlider = (UITableViewCell *)[sender superview]; 
UILabel *progressionLevelLabel = (UILabel *)[superViewOfSlider viewWithTag:121]; 
progressionLevelLabel.text = [NSString stringWithFormat:@"%d", value]; 
[superViewOfSlider addSubview:progressionLevelLabel]; 

}

+3

你幾乎可以肯定添加多個滑塊到你的細胞中的cellForRowAtIndexPath:請編輯您的問題,包括在其中添加了滑蓋的代碼。 – jrturton

回答

0

細胞每次被重用,您添加了一整套新的子視圖的細胞。研究創建這些子視圖的所有代碼,並將其移動到您創建單元的塊中。 之後,你只需要找到你需要的子視圖(例如使用標籤)並設置這些子視圖的值。